请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,这个@ResponseBody到底是什么作用,怎么理解?

老师,我写代码的时候忘记在controller里写这个@ResponseBody了,结果在发送请求的时候报错404,看错误应该是路径不对,但是路径RequestMapping是对的,是我没有写ResponseBody的原因,为什么会报404? 

还有这个ResponseBody是什么意义呢?我在百度查的是:在前台直接当成json来接受后台发送的数据。那意思就是说以后所有的controller里的方法都要加上这个@ResponseBody前台才能用吗?不是特别理解。

https://img1.sycdn.imooc.com//szimg/5a4de69d00017cca06620367.jpg

正在回答

1回答

你DEBUG一下就会发现方法其实执行成功了,只是return之后没有正确的处理。使用@ResponseBody就是通过<mvc:annotation-driven>来进行自动转换,<mvc:message-converters>里面的就是他的转换器属性

https://img1.sycdn.imooc.com//szimg/5a4dfac80001a46d11170564.jpg

jackson-databind这个依赖让json转换器jackson成为默认转换器之一。

注意:如果在xml中不写MappingJacksonHttpMessageConverter默认的jackson转换器是MappingJackson2HttpMessageConverter。

关于匹配的话,Spring 首先根据请求头或响应头的Accept 属性选择匹配的 HttpMessageConverter, 然后根据参数类型或泛型类型的过滤得到匹配的 HttpMessageConverter

下图为默认装配的 HttpMessageConverter

https://img1.sycdn.imooc.com//szimg/5a4e0ae40001275008740806.jpg

而MappingJacksonHttpMessageConverter这个转换器是我们在DS中装配的

能不能转换可以看HttpMessageConverter接口的 canWrit()方法是否返回true来决定的,在MappingJacksonHttpMessageConverter中重写了canWrite(),DEBUG的时候可以进去看看是否为true。

@responseBody的作用就是将数据用适当的转换器转换格式之后放入response的body中,通常用来返回JSON数据或者是XML数据。

如果你想不加上@responseBody不报错的话,返回的需要是String哦,这样可以走视图处理器



4 回复 有任何疑惑可以回复我~
  • 提问者 wendy_z #1
    同学你回答的很详细,我好像稍微明白了一些dispatcher-servlet和ResponseBody的作用了,非常感谢
    回复 有任何疑惑可以回复我~ 2018-01-05 13:49:06
  • Geely #2
    笑呵呵同学回答的好赞!!!
    回复 有任何疑惑可以回复我~ 2018-01-06 11:18:31
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信