Třída SourceHttpMessageConverter není ve výchozím nastavení zaregistrována

Toto pravidlo označuje použití javax.xml.transform.Source rozhraní, když SourceHttpMessageConverter třída je ne nalezena. Na stránkách Spring Framework 6.0 SourceHttpMessageConverter třída je ne již ve výchozím nastavení registrována na Spring MVC nebo RestTemplate.

V důsledku toho jsou webové aplikace Spring pomocí javax.xml.transform.Source nyní potřebují nakonfigurovat SourceHttpMessageConverter výslovně. Je důležité si uvědomit, že pořadí registrace převodníku je důležité. Například: SourceHttpMessageConverter by měl být zaregistrován před "univerzálními" konvertory, jako jsou např MappingJackson2HttpMessageConverter.

Následující úryvek kódu ukazuje použití funkce javax.xml.transform.Source:


                @RestController
                public class TransformController {
                    @GetMapping(value = "/transform", produces = MediaType.TEXT_HTML_VALUE)
                    public String transformXml() throws Exception{
                        Source xmlSource = new StreamSource(new ClassPathResource("sample.xml").getInputStream());
                        Source xsltSource = new StreamSource(new ClassPathResource("transform.xslt").getInputStream());
                        StringWriter writer = new StringWriter();
                        Result result = new StreamResult(writer);
                        TransformerFactory factory = TransformerFactory.newInstance();
                        Transformer transformer = factory.newTransformer(xsltSource);
                        transformer.transform(xmlSource, result);
                        return writer.toString();
                    }
                }  
             

V systému Spring Framework 6.0 zůstává kód řadiče nezměněn, ale jsou provedeny další konfigurační kroky nutné k zajištění jeho správné funkce. Můžete se zaregistrovat SourceHttpMessageConverter ručně na adrese Configuration kód. Následuje příklad tohoto případu použití:

            @Configuration
            public class WebConfig implements WebMvcConfigurer{
                @Override
                public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
                    converters.add(new SourceHttpMessageConverter<>());
                }
            }
            

Případně můžete nakonfigurovat SourceHttpMessageConverter v rámci RestTemplate pokud jej používáte k načítat XML z externích služeb. Zde je příklad tohoto případu použití:

            @Bean
            public RestTemplate restTemplate() {
                RestTemplate restTemplate = new RestTemplate();
                restTemplate.getMessageConverters().add(new SourceHttpMessageConverter<>());
                return restTemplate;
            }       
            

Další informace viz následující prostředky: