SourceHttpMessageConverter クラスはデフォルトでは登録されていません。

このルールは javax.xml.transform.Source インターフェイスが SourceHttpMessageConverter クラスは 見つからない が見つからない。 Spring フレームワーク 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 フレームワーク 6.0 では、コントローラのコードは変更されないが、コンフィギュレーショ ンステップが追加される。 が必要です。 登録可能 SourceHttpMessageConverter 手動で で Configuration コード 以下はその使用例である:

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

あるいは SourceHttpMessageConverter の中にある RestTemplate 外部サービスから 外部サービスからXMLを取得するために使用する場合。 この使用例を紹介しよう:

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

詳しくは、以下のリソースを参照してください。