http - example - ¿Cómo configurar el tipo de contenido predeterminado en Spring MVC si no se proporciona el encabezado Aceptar?
spring mvc pdf (2)
Desde la documentación de Spring , puedes hacer esto con la configuración de Java de esta manera:
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.defaultContentType(MediaType.APPLICATION_JSON);
}
}
Si está utilizando Spring 5.0 o posterior, extienda WebMvcConfigurer
lugar de WebMvcConfigurerAdapter
. WebMvcConfigurerAdapter
ha quedado en desuso debido a los métodos predeterminados que se encuentran en WebMvcConfigurer
.
Si se envía una solicitud a mi API sin un encabezado Aceptar, quiero que JSON sea el formato predeterminado. Tengo dos métodos en mi controlador, uno para XML y otro para JSON:
@RequestMapping(method = RequestMethod.GET,produces=MediaType.APPLICATION_ATOM_XML_VALUE)
@ResponseBody
public ResponseEntity<SearchResultResource> getXmlData(final HttpServletRequest request) {
//get data, set XML content type in header.
}
@RequestMapping(method = RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<Feed> getJsonData(final HttpServletRequest request){
//get data, set JSON content type in header.
}
Cuando envío una solicitud sin un encabezado Aceptar, se llama al método getXmlData
, que no es lo que quiero. ¿Hay una manera de decirle a Spring MVC que llame al método getJsonData
si no se ha proporcionado un encabezado Aceptar?
EDITAR:
Hay un campo defaultContentType
en el ContentNegotiationManagerFactoryBean
que hace el truco.
Si usa spring 3.2.x, solo agregue esto a spring-mvc.xml
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager" />
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="false"/>
<property name="mediaTypes">
<value>
json=application/json
xml=application/xml
</value>
</property>
<property name="defaultContentType" value="application/json"/>
</bean>