一、Jackson

1. 环境搭建

只要加入普通的 Web 依赖就行,为了方便依然引入 Lombok 和 热部署

image-20200817142417630

打开 Maven 依赖可以看见

image-20200817142731779

SpringBoot 自带的就是 jackson

2. SpringBoot中使用

2.1 建立实体类:

1
2
3
4
5
6
7
8
@Data
public class User {

private Integer id;
private String name;
private String address;
private Date date;
}

2.2 Controller层:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@RestController
public class UserController {

@GetMapping("/user")
public List<User> getUser() {
List<User> users = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
User user = new User();
user.setId(i);
user.setName("wang" + i);
user.setAddress("shanghai" + i);
user.setDate(new Date());
users.add(user);
}
return users;
}
}

2.3 结果:

image-20200817144557760

3. 深入了解 Springboot 中的 JSON 转换

思考:

  1. 前端传入的 json 数据如何被解析成 Java 对象作为 API入参

  2. API 返回结果又如何将 Java 对象解析成 json 格式数据返回给前端

关键类:HttpMessageConverter

官方原话:

1
Strategy interface that specifies a converter that can convert from and to HTTP requests and responses.

image-20200817150036913

从 Structure 中可以看见一共有五个方法:

image-20200817150448857

canRead:接收到请求时判断是否能读

canWrite:返回结果时判断是否能写

getSupportedMediaTypes:获取支持的 MediaType

read:能读则读

write:能写则写

注:在前面我们没有写任何配置也能实现转换,是由于其中有缺省配置

可以在 WebMvcConfigurationSupport 中查看

4.自定义 JSON 配置

方式一:在需要转换的属性上加上注解

1
2
3
4
5
6
7
8
9
10
@Data
public class User {

private Integer id;
private String name;
private String address;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date date;
}

结果:

image-20200817152735887

方式二:

配置类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Configuration
public class JsonConfig {

@Bean
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter () {

MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss"));
converter.setObjectMapper(objectMapper);
return converter;
}

}

结果:

image-20200817154209854

使用下面的配置类也可以:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Configuration
public class JsonConfig {

// @Bean
// MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter () {
//
// MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
// ObjectMapper objectMapper = new ObjectMapper();
// objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss"));
// converter.setObjectMapper(objectMapper);
// return converter;
// }

@Bean
ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
return objectMapper;
}

}

结果:

image-20200817154533630

5.Gson 和 Fastjson

如果想要和 Jackson 一样自定义配置:

只需要配置:GsonHttpMessageConverterFastJsonHttpMessageConverter

评论