转换的是HTTP协议与Java步伐中的对象之间的互相转换。请看下图:
上图是我们之前经常写的代码。请求体中的数据是如何转换成 user 对象的,底层现实上使用了 HttpMessageConverter 接口的其中的一个实现类 FormHttpMessageConverter 。
通过上图可以看出 FormHttpMessageConverter 是负责将 请求协议转换为 Java对象 的。
上图的代码也是之前我们经常写的,Controller 返回值看做逻辑视图名称,视图解析器将其转换成物理视图名称,天生视图对象,StringHttpMessageConverter 负责将视图对象中的 HTML 字符串写入到 HTTP协议的响应体中。最终完成响应。通过以上内容的学习,各人应该能够了解到 HttpMessageConverter接口是用来做什么的了:
通过上图可以看出 StringHttpMessageConverter 是负责将 Java对象 转换为响应协议 的。
之前我们都是传统的请求,Controller 返回一个 逻辑视图名 。然后交给 视图解析器 —>进行解析,最后跳转页面。而 AJAX 请求是不需要跳转页面的,因为 AJAX 是页面局部革新,以前我们在 Servlet 中使用 response.getWriter( ).print("message") 的方式响应。在 Spring MVC 中怎么办呢?固然,我们在 Spring MVC 中也可以使用 Servelt 原生API 来完成整个功能,代码如下:
不需要,我们可以使用 SpringMVC 中提供的 HttpMessageConverter 消息转换器。我们要向前端响应一个字符串 "hell ajax,my name is Spring MVC" ,这个 "hell ajax,my name is Spring MVC" 就是响应协议中的响应体。
最核心需要明白的位置是:return "hell ajax,my name is Spring MVC";启动服务器测试:http://localhost:8080/springmvc/
这里的 "hell ajax,my name is Spring MVC" 不是逻辑视图名称了,而是作为响应体的内容进行响应。直接输出到浏览器客户端。
以上步伐中使用的消息转换器是:StringHttpMessageConverter,为什么会启用这个消息转换器呢?因为你添加了 @ResponseBody 这个注解了。
这是完全可以的,此时底层使用的消息转换器还是:StringHttpMessageConverter固然可以,代码如下:
第二种方式:启用MappingJackson2HttpMessageConverter消息转换器。
- 第一种方式:自己写代码 将POJO对象 转换成JSON格式的字符串(如上面所示 return "{"username":"zhangsan","password":"1234"}"; ),用上面的方式直接 return即可。
- 第二种方式:启用MappingJackson2HttpMessageConverter消息转换器。
以上代码底层启动的就是: MappingJackson2HttpMessageConverter 消息转换器。6. 补充:@RestController = (@Controller + @ResponseBody )
它的功能很强大,可以将 POJO对象转换成 JSON格式的字符串,响应给前端。
着实这个消息转换器MappingJackson2HttpMessageConverter 本质上只是比: StringHttpMessageConverter 稍微多了一个 JSON 字符串的转换,其他的还是一样的。
该注解只能使用在处理器方法的形参上,
这个注解的作用是直接将请求体传递给Java步伐,在Java步伐中可以直接使用一个String 类型的变量接收这个请求体的内容。
底层使用的HTTP消息转换器是:FormHttpMessageConvertor
在没有使用 @RequestBody 这个注解的时候:
答案是:可以的
此时必须使用 @RequetBody 注解来完成,并且底层使用的消息转换器是:MappingJackson2HttpMessageConverter 。实现步骤如下:
- 第一步:引入 jackson 依赖
- 第二步:开启注解驱动
- 第三步:创建POJO类,将POJO类作为控制器方法的参数,并使用 @RequestBody 注解标注该参数。
举例:这里如果我们有这么一个需求:前端页面设置:
前端提交一个 id,后端根据 id 进行查询,如果返回 null,请在前端显示 404 错误,如果返回不是 null,则输出返回 User 对象。
11. 最后:
- HTTP 协议包罗 请求协议 和 响应协议。
- @ResponseBody 将服务器端的 return 返回值转化为“字符串(JSON格式的字符串)”再返回给客户端。
- @ResponseBody 将POJO对象 以 JSON格式 的字符串响应给浏览器
- 第一种方式:自己写代码 将POJO对象 转换成JSON格式的字符串(如上面所示 return "{"username":"zhangsan","password":"1234"}"; ),用上面的方式直接 return即可。
- 第二种方式:启用MappingJackson2HttpMessageConverter消息转换器。
- 需要注意的时需要添加:涉及到 JSON格式的转换,都需要导入相关的jar包,以及开启注解驱动。
- @RestController = (@Controller + @ResponseBody ), 被它标注的@RestController中所有的方法上都会自动标注 @ResponseBody
- @RequestBody 将前端的请求体的信息转换Java步伐中的 POJO对象,该注解只能使用在处理器方法的形参上,还可以将 前端的请求体直接以字符串形式传递给 requestBodyStr 变量。
- @RequetBody 注解将前端提交的 JSON 格式的字符串,转换为 Java步伐中的POJO对象,涉及到 JSON格式的转换,都需要导入相关的jar包,以及开启注解驱动。
- RequestEntity 类是一个平凡的类,这个类的实例封装了整个请求协议:包罗请求行,请求头,请求体所有信息。 该 RequestEntity 类出现在控制器方法的参数上。
- ResponseEntity 是一个类。使用该类的实例可以封装响应协议,包罗:状态行,响应头,响应体。 也就是说:如果你想定制属于自己的响应协议,可以使用该类。
- 无论是那个,只要涉及到 JSON格式的转换,都需要导入相关的jar包,以及开启注解驱动。
“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和复兴是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继承在其他的领域奋斗。感谢你们,我们总会在某个时候再次相遇。”
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |