1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
解释:
springboot
默认使用Jackson-databind
作为JSON
处理器,使用Gson
就需要先剔除jackson-databind
2.源码分析
···
···
@Bean
@ConditionalOnMissingBean
public GsonHttpMessageConverter gsonHttpMessageConverter(Gson gson) {
GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
converter.setGson(gson);
return converter;
}
解释: 以上是
GsonHttpMessageConverterConfiguration
中的一段源码,由@ConditionalOnMissingBean
可知,我们可以自己配置GsonHttpMessageConverter
来替换默认的配置
3.Gson自定义配置
@Configuration
public class GsonConfig {
@Bean
GsonHttpMessageConverter gsonHttpMessageConverter(){
GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
GsonBuilder builder = new GsonBuilder();
//设置日期格式
builder.setDateFormat("yyyy-MM-dd");
//设置过滤修饰符为protected的字段
builder.excludeFieldsWithModifiers(Modifier.PROTECTED);
Gson gson = builder.create();
converter.setGson(gson);
return converter;
}
}
4.测试
- 先定义一个model
@Getter
@Setter
@AllArgsConstructor
public class Book {
private String name;
private String author;
//此字段在输出时将会被忽略
protected float price;
private Date date;
}
- 定义路由
@RestController
public class BookController {
@GetMapping("/book")
public Book book(){
return new Book("小罗","小三",30f,new Date());
}
}
- 接口调用
使用浏览器访问http://localhost:8080/book,页面展示如下:
{"name":"小罗","author":"小三","date":"2020-11-07"}
5.fastjson配置
fastjson配置请看文章:springboot配置fastjson
网友评论