2013-08-12 12 views
14

Se una richiesta viene inviata alla mia API senza un'intestazione Accept, desidero rendere JSON il formato predefinito. Ho due metodi nel mio controller, uno per XML e una per JSON:Come impostare il tipo di contenuto predefinito in Spring MVC in nessuna intestazione Accept è fornito?

@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. 
} 

Quando mando un richiesta senza un header Accept il metodo getXmlData si chiama, che non è quello che voglio. C'è un modo per dire a Spring MVC di chiamare il metodo getJsonData se non è stata fornita l'intestazione Accept?

EDIT:

C'è un campo defaultContentType nel ContentNegotiationManagerFactoryBean che fa il trucco.

+2

Se hai trovato una soluzione usando 'ContentNegotiationManagerFactoryBean' aggiungilo come soluzione. –

risposta

11

Se si utilizza la primavera 3.2.x, basta aggiungere questo per la primavera-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> 
+0

Ho inserito questo nel mio servlet-context.xml e ha funzionato perfettamente. Grazie @Larry Z. – UpAllNight

+0

funziona su di me 2 !!! thx – Rugal

+0

L'impostazione di 'mediaTypes' ha effetto quando' favorPathExtension' è impostato su 'false'? – holmis83

15

Dal Spring documentation, si può fare questo con config Java in questo modo:

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 
    @Override 
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { 
    configurer.defaultContentType(MediaType.APPLICATION_JSON); 
    } 
}