tecliu 2016-11-23 17:20 采纳率: 0%
浏览 13231
已结题

SpringMVC的@RequestMapping注解只能将produces设置为text/html

遇到了一个奇葩的问题。我想通过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,是不是就是这个原因?

  • 写回答

3条回答

  • ziwozizhan 2016-11-24 00:31
    关注

    返回json时 在方法上加上注解 @Responsebody 要不一直会默认返回一个页面给前台

    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序