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 要不一直会默认返回一个页面给前台

    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮