1、@RequestBody
作用:可以把前台请求的标准json字符串,在后台接口可以直接转成Java对象
位置:标记在形参前面
1.1 实现步骤
- 导入依赖
<!-- jackson:实现json格式的字符串与Java对象的转换 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
- 目标接口
@RequestMapping("/testModelAndViewUsePostAndJson")
public ModelAndView testMavPost(@RequestBody User user){
log.info("{}", user);
ModelAndView mav = new ModelAndView();
//视图名称
mav.setViewName("success");
//数据:request
mav.addObject("user", user);
return mav;
}
| Postman测试 |
2、@ResponseBody
作用:可以把后台接口的返回值以响应体的形式直接返回客户端
将java对象转换成json数据返回到客户端
位置:标记在目标接口上或者返回值类型前
2.1 实现步骤
- 导入依赖
<!-- jackson:实现json格式的字符串与Java对象的转换 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
- 目标接口
@RequestMapping("/testResponseBody")
@ResponseBody
public User testResponseBody(Long id){
log.info("id:{}", id);
//模拟从数据库获取用户对象
User user = new User();
user.setId(id);
user.setUsername("汤姆");
user.setBirth(new Date());
user.setAge(12);
//变成json字符串直接响应给客户端,如果返回的是字符串,那么就直接响应字符串
return user;
}
@RequestMapping("/testResponseBodyReturnString")
public @ResponseBody String testResponseBodyReturnString(Long id){
log.info("id:{}", id);
//模拟从数据库获取用户对象
User user = new User();
user.setId(id);
user.setUsername("汤姆大baby");
user.setBirth(new Date());
user.setAge(12);
//变成json字符串直接响应给客户端,如果返回的是字符串,那么就直接响应字符串
return user.getUsername();
}
- 测试上述接口就可以了
2.2 中文乱码处理
- 如果出现了乱码,在springmvc配置文件修改注解驱动为以下内容
<mvc:annotation-driven>
<mvc:message-converters>
<!-- 处理纯字符串中文乱码 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- jackson处理中文乱码-->
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
3、@RestController
标记在类上,等同于 @Controller + @ResponseBody,作用就是当前控制器中所有Handler都返回json数据