老师,这个@ResponseBody到底是什么作用,怎么理解?
来源:7-2 添加分类和更新分类名字功能开发
wendy_z
2018-01-04
老师,我写代码的时候忘记在controller里写这个@ResponseBody了,结果在发送请求的时候报错404,看错误应该是路径不对,但是路径RequestMapping是对的,是我没有写ResponseBody的原因,为什么会报404?
还有这个ResponseBody是什么意义呢?我在百度查的是:在前台直接当成json来接受后台发送的数据。那意思就是说以后所有的controller里的方法都要加上这个@ResponseBody前台才能用吗?不是特别理解。
1回答
-
你DEBUG一下就会发现方法其实执行成功了,只是return之后没有正确的处理。使用@ResponseBody就是通过<mvc:annotation-driven>来进行自动转换,<mvc:message-converters>里面的就是他的转换器属性
jackson-databind这个依赖让json转换器jackson成为默认转换器之一。
注意:如果在xml中不写MappingJacksonHttpMessageConverter默认的jackson转换器是MappingJackson2HttpMessageConverter。
关于匹配的话,Spring 首先根据请求头或响应头的Accept 属性选择匹配的 HttpMessageConverter, 然后根据参数类型或泛型类型的过滤得到匹配的 HttpMessageConverter
下图为默认装配的 HttpMessageConverter
而MappingJacksonHttpMessageConverter这个转换器是我们在DS中装配的
能不能转换可以看HttpMessageConverter接口的 canWrit()方法是否返回true来决定的,在MappingJacksonHttpMessageConverter中重写了canWrite(),DEBUG的时候可以进去看看是否为true。
@responseBody的作用就是将数据用适当的转换器转换格式之后放入response的body中,通常用来返回JSON数据或者是XML数据。
如果你想不加上@responseBody不报错的话,返回的需要是String哦,这样可以走视图处理器
422018-01-06
相似问题