采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,我写代码的时候忘记在controller里写这个@ResponseBody了,结果在发送请求的时候报错404,看错误应该是路径不对,但是路径RequestMapping是对的,是我没有写ResponseBody的原因,为什么会报404?
还有这个ResponseBody是什么意义呢?我在百度查的是:在前台直接当成json来接受后台发送的数据。那意思就是说以后所有的controller里的方法都要加上这个@ResponseBody前台才能用吗?不是特别理解。
你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哦,这样可以走视图处理器
同学你回答的很详细,我好像稍微明白了一些dispatcher-servlet和ResponseBody的作用了,非常感谢
笑呵呵同学回答的好赞!!!
登录后可查看更多问答,登录/注册
前后端分离,数据库接口设计,架构设计,功能开发,上线运维
10.4k 10
1.9k 22
1.5k 21
2.3k 21
2.1k 18