jackson-dataformat-xml turns @ResponseBody to XML jackson-dataformat-xml turns @ResponseBody to XML json json

jackson-dataformat-xml turns @ResponseBody to XML


jackson-dataformat-xml appears to be registering a MappingJackson2HttpMessageConverter with a XmlMapper, along with other HttpMessageConverters that work with XML. If you always intended to return JSON from your controllers, you can change what HttpMessageConverter your app uses by overriding configureMessageConverters

For Spring 5.0 and above,

@Configurationpublic class HttpResponseConfig implements WebMvcConfigurer {    @Override    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {        converters.removeIf(converter -> supportsXml(converter) || hasXmlMapper(converter));    }    private boolean supportsXml(HttpMessageConverter<?> converter) {        return converter.getSupportedMediaTypes().stream()            .map(MimeType::getSubtype)            .anyMatch(subType -> subType.equalsIgnoreCase("xml"));    }    private boolean hasXmlMapper(HttpMessageConverter<?> converter) {        return converter instanceof MappingJackson2HttpMessageConverter                && ((MappingJackson2HttpMessageConverter)converter).getObjectMapper().getClass().equals(XmlMapper.class);    }}

For older versions of Spring, replace implements WebMvcConfigurer with extends WebMvcConfigurerAdapter


Add:

Accept: application / json

to the request HTTP header.

Reference: REST API - Use the "Accept: application/json" HTTP Header


Read this for an analysis of how Spring does content negotiation and allows producing either XML or JSON.

The simplest way is to add an extension at the URL: Instead of /path/resource use /path/resource.json

You may also add a format parameter e.g. /path/resource?format=json or pass an appropriate Accept header