遇到了一个奇葩的问题。我想通过Controller返回JSON格式数据,代码如下:
@RequestMapping(value="ajax",produces="application/json")
public ResponseEntity<Message> service(HttpServletRequest request){
//......
}
这样在通过jQuery请求时,根本不进入方法,直接返回406错误。但通过浏览器调试工具可以看到Accept请求头确实是application/json。
后来改成了:
@RequestMapping(value="ajax",produces="text/html")
public ResponseEntity<Message> service(HttpServletRequest request){
System.out.println(request.getHeader("Accept"));
}
就能进入方法执行了!但是在方法内通过request.getHeader("Accept")输出的确实是application/json啊!
也就是说,浏览器发送的Accept请求头确实是application/json,但在与@RequestMapping匹配时SpringMVC认为Accept请求头是text/html,而且认为返回的响应内容也是text/html类型的!这难道是bug吗?
BTW,我使用的是Spring3.2.17,在网上查资料看到很多人要在配置文件中重新定义MappingJacksonHttpMessageConverter,在supportedMediaTypes中添加text/html,是不是就是这个原因?