最近做了一个springboot项目,了解了下controller层统一格式返回数据,做一些必要的笔记,一来是对自己学习的知识的巩固,二来对有同样问题的人有参考作用
一 概要
在项目开发中,接口与接口之间、前后端之间的数据传输都使用 JSON 格式。本节课就来讲解 Spring Boot 是如何返回 JSON 格式数据的,核心内容主要有:
- @RestController 注解
- 常用数据类型转为 JSON 格式
- 使用 fastjson 封装统一返回的数据结构
二 @RestController注解
在 Spring Boot 中,接口返回 JSON 格式的数据很简单,在 Controller 中使用 @RestController 注解即可返回 JSON 格式的数据。
@RestController
也是 Spring Boot 新增的一个注解,我们点进去看一下该注解都包含了哪些东西。
@Target({
ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
String value() default "";
}
可以看出,@RestController
注解包含了原来的 @Controller
和 @ResponseBody
注解。使用过 Spring 的朋友对 @Controller 注解已经非常了解了,这里不再赘述。@ResponseBody 注解是将返回的数据结构转换为 JSON 格式。
所以在默认情况下,使用了 @RestController 注解即可将返回的数据结构转换成 JSON 格式,在 Spring Boot 中默认使用的 JSON 解析技术框架是 Jackson。
我们点开 pom.xml 中的 spring-boot-starter-web 依赖,可以看到 spring-boot-starter-json 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
<version>2.0.3.RELEASE</version>
<scope>compile</scope>
</dependency>
Spring Boot 对依赖都做了很好的封装,可以看到很多 spring-boot-starter-xxx 系列的依赖,这是 Spring Boot 的特点之一,不需要人为引入很多相关的依赖,starter-xxx 系列直接包含了所必要的依赖,所以我们再次点进去上面提到的 spring-boot-starter-json 依赖,可以看到如下代码:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>2.9.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.9.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
<version>2.9.6</version>
<scope>compile</scope>
</dependency>
到此为止,我们知道了 Spring Boot 中默认使用的 JSON 解析框架是 Jackson
。下面我们看一下默认的 Jackson 框架对常用数据类型的转 JSON 处理。
三 常用数据类型转为 JSON 格式
在实际项目中,常用的数据结构无非有类对象、List 对象、Map 对象,我们看一下默认的 Jackson 框架如何将这三个常用的数据结构转成 JSON 格式的。
3.1 创建 User 实体类
为了测试,我们需要创建一个实体类,这里我们就用 User 来演示。
public class User {
private Long id;
private String username;
private String password;
/* 省略get、set和带参构造方法 */
}
3.2 创建 Controller 类
然后我们创建一个 Controller,分别返回 User 对象、List 和 Map<String, Object>。
import com.itcodai.course02.entity.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList