SpringBoot中Json解析方案与自定义配置方法(二)——使用Gson
2020-03-17 18:40
941 查看
一、添加依赖
新建一个最简单的Spring项目,导入Web依赖,可以发现依赖里面包含了json依赖,此依赖默认使用的是jackson,如果使用Gson需要在pom.xml中去掉Jackson依赖,并加入Gson依赖。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 除去jackson依赖--> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-json</artifactId> </exclusion> </exclusions> </dependency> <!-- 加入Gson依赖--> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> </dependency>
二、查看源码
GsonHttpMessageConvertersConfiguration.java
org/springframework/boot/autoconfigure/http/GsonHttpMessageConvertersConfiguration.java
@Configuration(proxyBeanMethods = false) @ConditionalOnClass(Gson.class) class GsonHttpMessageConvertersConfiguration { @Configuration(proxyBeanMethods = false) @ConditionalOnBean(Gson.class) @Conditional(PreferGsonOrJacksonAndJsonbUnavailableCondition.class) static class GsonHttpMessageConverterConfiguration { @Bean @ConditionalOnMissingBean GsonHttpMessageConverter gsonHttpMessageConverter(Gson gson) { GsonHttpMessageConverter converter = new GsonHttpMessageConverter(); converter.setGson(gson); return converter; } }
@ConditionalOnClass(ObjectMapper.class):如果用户导入Gson依赖,系统才会默认使用以上配置,使用
MappingJackson2HttpMessageConverter转换工具类,才会生效。
@ConditionalOnMissingBean:如果没有配置Bean,系统会默认使用这里的Bean,如果用户对时间格式等另外有需求,需要自主配置,系统则会优先使用用户配置的Bean而忽略系统配置的Bean
GsonAutoConfiguration.java
org/springframework/boot/autoconfigure/gson/GsonAutoConfiguration.java
@Bean @ConditionalOnMissingBean public Gson gson(GsonBuilder gsonBuilder) { return gsonBuilder.create(); }
三、自定义配置
系统默认配置调试
写一个简单的Controller类,进行简单的测试
@RestController @RequestMapping("/test") public class StudentController { @GetMapping("/hello") public Student get(){ Student student = new Student(); student.setId((long) 1); student.setAge(15); student.setName("alvin"); student.setBirthday(new Date()); return student; } }
- Debug调试:
@ConditionalOnClass(Gson.class)中的Gson.class是从GsonAutoConfiguration.java中注入进来的,因此小程序先执行GsonAutoConfiguration.java,然后执行GsonHttpMessageConvertersConfiguration.java. - postman调用
Gson日期的默认返回格式为"Feb 22, 2020 1:55:24 PM",如果用户对日期格式或者其他属性的格式另有需求,可以自定义配置。
自定义配置方法与调试:
方案一:
新建一个
JsonConfig.java作为配置类
@Configuration public class JsonConfig { @Bean public GsonHttpMessageConverter gsonHttpMessageConverter(){ GsonHttpMessageConverter converter = new GsonHttpMessageConverter(); converter.setGson(new GsonBuilder().setDateFormat("yyyy-MM-dd").create()); return converter; } }
- Debug调试
- postman返回
方案二:
通过方案一,debug发现,系统仅仅是对注入进来的Gson进行了操作,因此可以直接创建一个Gson对象,在GsonAutoConfiguration.java中有一个注解是
@ConditionalOnMissingBean,如果用户创建一个新的Gson,GsonAutoConfiguration.java中的Bean将会失效。
@Bean Gson gson(){ return new GsonBuilder().setDateFormat("yyyy/MM/dd").create(); }
- Debug
通过可以看到,用户自主创建的Bean主动注入进了GsonHttpMessageConvertersConfiguration.java里面,而GsonAutoConfiguration.java中的Bean失效了。 - postman返回
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- spring-boot @Async 的使用、自定义Executor的配置方法
- Spring Boot使用FastJson解析JSON数据的方法
- spring-boot 方法异步调用,自定义线程池配置使用
- spring-boot @Async 的使用、自定义Executor的配置方法
- spring-boot @Async 的使用、自定义Executor的配置方法
- spring-boot 自定义Executor的配置方法及@Async的使用
- spring-boot @Async 的使用、自定义Executor的配置方法
- spring-boot 线程池 @Async 的使用、自定义Executor的配置方法
- SpringBoot--@Async 的使用、自定义Executor的配置方法
- springBoot使用Controller读取配置文件两种方式&读取自定义配置方法
- (二)初识springboot之使用fastjson解析数据(解决乱码及简单配置)
- Java多线程——spring-boot 线程池 @Async 的使用、自定义Executor的配置方法
- 4. 使用别的json解析框架【从零开始学Spring Boot】
- Spring4.X的restFul 使用Gson返回json配置
- SpringBoot + Spring Security 学习笔记(一)自定义基本使用及个性化登录配置
- 学习笔记 Tianmao 篇 使用简单封装后的自定义OkHttp 获取json被GSON解析后的数据
- 【传智播客郑州校区分享】Spring Boot中使用FastJson解析Json数据
- Spring Boot 2.0 配置属性自定义转换的方法
- (4)Spring Boot完美使用FastJson解析JSON数据【从零开始学Spring Boot】
- Android中使用Gson解析JSON数据的两种方法