Clasa SourceHttpMessageConverter nu este înregistrată în mod implicit

Această regulă marchează utilizarea javax.xml.transform.Source atunci când interfața SourceHttpMessageConverter clasa este nu găsită. În Spring Cadrul 6.0, în SourceHttpMessageConverter clasa este nu nu mai este înregistrată implicit în Spring MVC sau RestTemplate.

În consecință, aplicațiile web Spring care utilizează javax.xml.transform.Source acum trebuie să configurați SourceHttpMessageConverter în mod explicit. Este important de reținut că ordinea de înregistrare a convertorului este importantă. De exemplu, SourceHttpMessageConverter ar trebui să fie înregistrate înaintea convertoarelor de tip "catch-all" precum MappingJackson2HttpMessageConverter.

Următorul fragment de cod arată utilizarea 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();
                    }
                }  
             

În Spring Framework 6.0, codul controlerului rămâne neschimbat, dar sunt necesare etape suplimentare de configurare pentru a se asigura că acesta funcționează corect. Vă puteți înregistra SourceHttpMessageConverter manual în Configuration cod. Următorul este un exemplu al acestui caz de utilizare:

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

Alternativ, puteți configura SourceHttpMessageConverter în cadrul unei RestTemplate dacă îl utilizați pentru preluați XML din servicii externe. Iată un exemplu al acestui caz de utilizare:

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

Pentru informaţii suplimentare, vedeţi resursele următoare: