2015-04-27 30 views
0

我已经使用Spring Java配置定义了两个这样的转换器。除非我在HTTP头中指定了'Accept = applicaiton/json',否则我总是得到一个XML响应。有没有办法将默认转换器设置为JSON而不是XML转换器。Spring Java配置消息转换器优先级

@EnableWebMvc 
@Configuration 
@ComponentScan(basePackages = {"foo.bar"}) 
public class WebMvcConfig extends WebMvcConfigurerAdapter { 
... 

@Bean 
public MappingJackson2HttpMessageConverter jsonConverter() { 
    MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); 
    ObjectMapper objectMapper = new ObjectMapper(); 
    jsonConverter.setObjectMapper(objectMapper); 
    return jsonConverter; 
} 

@Bean 
public MappingJackson2XmlHttpMessageConverter xmlConverter() { 
    MappingJackson2XmlHttpMessageConverter xmlConverter = new MappingJackson2XmlHttpMessageConverter(); 
    return xmlConverter; 
} 

@Override 
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
    converters.add(jsonConverter()); 
    converters.add(xmlConverter()); 
    super.configureMessageConverters(converters); 
} 

这是我的控制器。

@RequestMapping(value = "/product") 
public 
@ResponseBody 
BSONObject getProducts(@RequestParam String ids, 
         @RequestParam(required = false) String types) { 


    List<BSONObject> products = commonDataService.getData(ids, types); 

    return products; 
} 

回答

0

试试下面的配置,它设置默认内容的谈判策略(基于文章here):

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

另一种选择将是提供指定内容格式的其他方式,如果Accept头部是不可行的,一个选项可能是指定将作为json返回的扩展/myuri/sample.json