SourceHttpMessageConverter 클래스는 기본적으로 등록되지 않습니다

이 규칙은 javax.xml.transform.Source 인터페이스가 SourceHttpMessageConverter 클래스는 not 찾을 수 없습니다. Spring 프레임워크 6.0 에서 SourceHttpMessageConverter 클래스는 no 더 이상 기본적으로 등록되지 않습니다 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 수동으로 in 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;
            }       
            

자세한 정보는 다음 자원을 참조하십시오.