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

来源:7-2 添加分类和更新分类名字功能开发

wendy_z

2018-01-04

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

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

http://img.mukewang.com/szimg/5a4de69d00017cca06620367.jpg

写回答

1回答

看你笑呵呵

2018-01-04

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

//img.mukewang.com/szimg/5a4dfac80001a46d11170564.jpg

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

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

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

下图为默认装配的 HttpMessageConverter

//img.mukewang.com/szimg/5a4e0ae40001275008740806.jpg

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

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

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

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



4
2
Geely
笑呵呵同学回答的好赞!!!
2018-01-06
共2条回复

从0开始 独立完成企业级Java电商网站服务端开发

前后端分离,数据库接口设计,架构设计,功能开发,上线运维

9476 学习 · 8804 问题

查看课程