HttpMessageConverter - @RequestBody 和 @ResponseBody 是如何简化开发的
HttpMessageConverter - @RequestBody 和 @ResponseBody 是如何简化开发的
使用 SpringMVC 提供 @RequestBody
和 @ResponseBody
注解可以简化开发。
@RequestBody
简化了哪些流程
Html 标签
1 | <div id="app"> |
Vue + axios 代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19new Vue({
el: "#app",
methods: {
jsonRequestBody: function () {
axios({
"method": "post",
"url": "/demo/AjaxServlet",
"data": {
"username": "root",
"password": "123456"
}
}).then(function (response) {
console.log(response.data);
}).catch(function (error) {
console.log(error)
})
},
}
});
Bean 对象代码:
1 | public class User { |
Servlet 代码:
1 | public class AjaxServlet extends HttpServlet { |
通过以上 1-8 步,我们将请求体中的 JSON 字符串成功转换为了 Java 对象!
在 SpringMVC 中,完成固定的配置(见文末)以后,使用 @RequestBody
注解可以将以上步骤简化到极致:
1 |
|
原生 Servlet API 中的 1-8 步全部不用我们来做了,直接在控制器方法中将 JavaBean 作为形参,并加上 @RequestBody
即可!
@ResponseBody
简化了哪些流程
Html 标签
1 | <div id="app"> |
Vue + axios 代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16new Vue({
el: "#app",
methods: {
jsonResponseBody: function () {
axios({
"method": "get",
"url": "/demo/AjaxServlet"
}).then(function (response) {
// response.data 应该是 json 响应体转换后的 js 对象
console.log(response.data);
}).catch(function (error) {
console.log(error)
})
},
}
});
Bean 对象代码:
1 | public class User { |
Servlet 代码:
1 | public class AjaxServlet extends HttpServlet { |
通过以上 2-5 步,我们将 Java 对象成功转换为了 JSON 字符串,并输出到响应体中。
在 SpringMVC 中,完成固定的配置(见文末)以后,使用 @ResponseBody
注解可以将以上步骤简化到极致:
1 |
|
原生 Servlet API 中的 2-5 步全部不用我们来做了,直接在控制器方法中将 JavaBean 对象返回,并在控制器方法上加上 @ResponseBody
即可!
SpringMVC 中 JSON 字符串与 JavaBean 互相转换所需要的固定配置
固定配置包括以下两步,且只需配置一次:
导入 jackson 的依赖1
2
3
4
5<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.1</version>
</dependency>
在 SpringMVC 的核心配置文件中开启 mvc 的注解驱动,此时在 HandlerAdaptor
中会自动装配一个消息转换器:MappingJackson2HttpMessageConverter
,可以浏览器的请求过来的 Json 格式的字符串转换为服务器中的 Java 对象1
<mvc:annotation-driven />