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: