返回JSON
1、 @ResponseBody
@ResponseBody注解用于将Controller类的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如:json、xml等,通过Response响应给客户端。
JSON解析需要专业的工具,目前主流的 JSON 处理工具主要有三种:
- Jackson
开源的Jackson,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。 - Gson
Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。 - fFastjson
Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。
在 SpringMVC 中,对 jackson 和 gson 都提供了相应的支持,就是如果使用这两个作为 JSON 转换器,只需要添加对应的依赖就可以了,返回的对象和返回的集合、Map 等都会自动转为 JSON,但是,如果使用 fastjson,除了添加相应的依赖之外,还需要自己手动配置 HttpMessageConverter 转换器。其实前两个也是使用 HttpMessageConverter 转换器,但是是 SpringMVC 自动提供的,SpringMVC 没有给 fastjson 提供相应的转换器。
下面以Jackson为例:
1、添加依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.1</version>
</dependency>
2、表单提交数据:
<form method="post" action="four">
姓名:<input type="text" name="name"><br>
年龄:<input type="text" name="age"><br>
<input type="submit" value="提交"><br>
</form>
3、controller:
@RequestMapping("/four")
@ResponseBody
public User1 test3(User1 user) throws Exception{
return user;
}
4、访问页面的结果:
Gson、FastJson这里就不再赘述了,参考下面文章:
http://springmvc.javaboy.org/2019/1115/return-json
2、@RestController
@RestController注解相当于@ResponseBody + @Controller合在一起的作用。返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面。
(1)、如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
(2)、 如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
上面的例子,使用@RestController注解代替@Controller和@ResponseBody注解效果是一个的:
@RestController
public class RestControllerTest {
@RequestMapping("/rest")
public User1 test3(User1 user) throws Exception{
return user;
}
}