Spring Java配置消息转换器优先级

时间:2015-04-27 18:58:45

标签: rest spring-mvc jackson spring-java-config

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

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

1 个答案:

答案 0 :(得分:1)

尝试以下配置,它会设置默认的内容协商策略(基于文章here):

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

另一种选择是提供指定内容格式的其他方法,如果Accept标头不可行,则选项可以指定将作为json返回的扩展名/myuri/sample.json。 / p>