Toto pravidlo označuje použití
javax.xml.transform.Source
rozhraní, když
SourceHttpMessageConverter třída je ne nalezena.
Na stránkách Spring Framework 6.0
SourceHttpMessageConverter třída je ne již ve výchozím nastavení registrována na Spring MVC nebo
RestTemplate.
V důsledku toho jsou webové aplikace Spring pomocí
javax.xml.transform.Source nyní potřebují nakonfigurovat
SourceHttpMessageConverter
výslovně. Je důležité si uvědomit, že pořadí registrace převodníku je důležité.
Například:
SourceHttpMessageConverter by měl být zaregistrován před "univerzálními" konvertory, jako jsou např
MappingJackson2HttpMessageConverter.
Následující úryvek kódu ukazuje použití funkce
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();
}
}
V systému Spring Framework 6.0 zůstává kód řadiče nezměněn, ale jsou provedeny další konfigurační kroky nutné k zajištění jeho správné funkce.
Můžete se zaregistrovat
SourceHttpMessageConverter ručně na adrese Configuration kód.
Následuje příklad tohoto případu použití:
@Configuration
public class WebConfig implements WebMvcConfigurer{
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new SourceHttpMessageConverter<>());
}
}
Případně můžete nakonfigurovat
SourceHttpMessageConverter v rámci
RestTemplate pokud jej používáte k načítat XML z externích služeb.
Zde je příklad tohoto případu použití:
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new SourceHttpMessageConverter<>());
return restTemplate;
}
Další informace viz následující prostředky: