SourceHttpMessageConverter 类默认未注册

该规则标记了使用 javax.xml.transform.SourceSourceHttpMessageConverter 类不是 未找到 找不到。 在 Spring Framework 6.0 中, SourceHttpMessageConverter 类是 不再 在 Spring MVC 或 RestTemplate.

因此, Spring 网络应用程序使用 javax.xml.transform.Source 现在需要 配置 SourceHttpMessageConverter 明确。 需要注意的是,转换器注册的顺序很重要。 例如 SourceHttpMessageConverter 应 等 "包罗万象 "的转换器之前注册。 MappingJackson2HttpMessageConverter.

下面的代码片段显示了 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();
                    }
                }  
             

在 Spring Framework 6.0 中,控制器代码保持不变,但需要额外的配置步骤来确保其正常运行。 以确保其正常运行。 您可以注册 SourceHttpMessageConverter 手动 在 Configuration 分享代码。 下面是这种用例的一个示例:

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

或者,您也可以配置 SourceHttpMessageConverterRestTemplate 如果您使用它来 从外部服务检索 XML。 下面是一个使用实例:

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

有关更多信息,请参阅以下资源: