tutorial mvc example español dispatcherservlet http rest spring-mvc content-negotiation

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>