jackson-dataformat-xml turns @ResponseBody to XML
jackson-dataformat-xml
appears to be registering a MappingJackson2HttpMessageConverter
with a XmlMapper
, along with other HttpMessageConverter
s 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