2013-08-12 31 views
14

Nếu một yêu cầu được gửi đến API của tôi mà không có tiêu đề Chấp nhận, tôi muốn đặt JSON làm định dạng mặc định. Tôi có hai phương pháp trong điều khiển của tôi, một cho XML và một cho JSON:Làm cách nào để đặt loại nội dung mặc định trong Spring MVC trong tiêu đề Không chấp nhận được cung cấp?

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

Khi tôi gửi một yêu cầu mà không có một tiêu đề Chấp nhận các phương pháp getXmlData được gọi, mà không phải là những gì tôi muốn. Có cách nào để báo cho Spring MVC gọi phương thức getJsonData nếu không có tiêu đề Accept nào được cung cấp không?

EDIT:

Có một lĩnh vực defaultContentType trong ContentNegotiationManagerFactoryBean rằng hiện các trick.

+2

Nếu bạn đã tìm thấy một giải pháp bằng cách sử dụng 'ContentNegotiationManagerFactoryBean' thêm giải pháp đó làm giải pháp. –

Trả lời

11

Nếu bạn sử dụng 3.2.x mùa xuân, chỉ cần thêm video này vào mùa xuân-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

Tôi đặt nó trong servlet-context.xml và nó hoạt động hoàn hảo. Thanks @Larry Z. – UpAllNight

+0

nó hoạt động trên tôi 2 !!! thx – Rugal

+0

Cài đặt 'mediaTypes' có ảnh hưởng gì không khi' favorPathExtension' được đặt thành 'false'? – holmis83

15

Từ Spring documentation, bạn có thể làm điều này với Java cấu hình như thế này:

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