使用 android 开发的同窗,可能对 Gson
更为了解,Gson
是谷歌官方推出的支持 JSON
-- Java Object
相互转换的 Java
序列化/反序列化 库,以前因为没有用过,因此学习一下。html
在 Spring Boot
中咱们也能够是哟合那个 Gson
做为 json
处理。本章主要学习 Gson
的用法java
咱们在使用 Gson 的时候必须先移除 Spring 自带的 jackson。android
本项目源代码下载git
注意:本示例是用来 IDEA 开发工具(window、mac 通用)github
File > New > Project
,以下图选择 Spring Initializr
而后点击 【Next】下一步GroupId
(包名)、Artifact
(项目名) 便可。点击 下一步 groupId=com.fishproSpring Web Starter
前面打钩。spring-boot-study-gsondemo
.设置一个启动端口web
server.port = 8089
找到下面 spring-boot-study-gsondemo
下的 pom.xml
,去掉下面代码spring
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
替换成以下代码,其中 exclusions
表示排除。json
<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>
注意这个步骤很重要,否则在 restcontroller 或 contoller 自动转换 json 的时候不会使用 gson。浏览器
package com.fishpro.gsondemo.config; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.GsonHttpMessageConverter; import java.util.ArrayList; import java.util.Collection; @Configuration public class GsonConfig { @Bean public HttpMessageConverters customConverters() { Collection<HttpMessageConverter<?>> messageConverters = new ArrayList<>(); GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter(); messageConverters.add(gsonHttpMessageConverter); return new HttpMessageConverters(true, messageConverters); } }
另外咱们也能够经过配置 WebMvcConfigurerAdapter 的继承类实现同样的功能 ,例以下面的功能,bash
Configuration @EnableWebMvc public class Application extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter < ? >> converters) { GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter(); converters.add(gsonHttpMessageConverter); } }
本章节目的是实现
咱们采用和 fastjson 、jackson 示例同样的过程,感兴趣的能够看这篇【Spring Boot Json 之 Jackjson Fastjson】.
新建两个实体类,用户类、用户地址类,他们的关系是父子关系
User(路径 src/main/java/com/fishpro/gsondemo/dto/User.java)
public class User { private Integer userId; private String username; private List<Address> addresses; private Calendar created = new GregorianCalendar(); public User(Integer userId,String username){ this.userId=userId; this.username=username; } public User(Integer userId,String username,List<Address> addresses){ this.userId=userId; this.username=username; this.addresses=addresses; } public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public List<Address> getAddresses() { return addresses; } public void setAddresses(List<Address> addresses) { this.addresses = addresses; } public Calendar getCreated() { return created; } public void setCreated(Calendar created) { this.created = created; } }
Address (路径 src/main/java/com/fishpro/gsondemo/dto/Address.java)
public class Address { private String street; private String zipcode; private String mobile; public Address(String street,String zipcode,String mobile){ this.street=street; this.zipcode=zipcode; this.mobile=mobile; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getZipcode() { return zipcode; } public void setZipcode(String zipcode) { this.zipcode = zipcode; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } }
UserController
(路径 src/main/java/com/fishpro/gsondemo/controller/UserController.java)
@RequestMapping("/user") @RestController public class UserController { @GetMapping("/get") public User get(){ List<Address> addressList=new ArrayList<>(); addressList.add(new Address("江苏省南京市玄武大道1000号","201001","1801989098")); addressList.add(new Address("江苏省南京市玄武大道1001号","201001","1811989098")); User user = new User(1, "fishpro",addressList); return user; } }
运行 右键点击 JsonApplication
> Run JsonApplication
在浏览器中输入 http://localhost:8089/user/get 系统直接返回了json格式,那么 Spring Boot 中默认就是哟合那个了 Jackson 来处理。
{ "userId": 1, "username": "fishpro", "addresses": [{ "street": "江苏省南京市玄武大道1000号", "zipcode": "201001", "mobile": "1801989098" }, { "street": "江苏省南京市玄武大道1001号", "zipcode": "201001", "mobile": "1811989098" }], "created": "2019-08-13T14:40:50.901+0000" }
接上面 3.2 代码继续写
@RequestMapping("/user") @RestController public class UserController { @GetMapping("/get") public User get(){ List<Address> addressList=new ArrayList<>(); addressList.add(new Address("江苏省南京市玄武大道1000号","201001","1801989098")); addressList.add(new Address("江苏省南京市玄武大道1001号","201001","1811989098")); User user = new User(1, "fishpro",addressList); //01 基本类型解析 Gson gson = new Gson(); int i = gson.fromJson("99", int.class); //100 double d = gson.fromJson("\"99.99\"", double.class); //99.99 boolean b = gson.fromJson("true", boolean.class); // true String str = gson.fromJson("String", String.class); // String System.out.println("int 类型:"+i); System.out.println("double 类型:"+d); System.out.println("boolean 类型:"+b); System.out.println("String 类型:"+str); return user; } }
接上面 3.4.1 代码继续写
@RequestMapping("/user") @RestController public class UserController { @GetMapping("/get") public User get(){ List<Address> addressList=new ArrayList<>(); addressList.add(new Address("江苏省南京市玄武大道1000号","201001","1801989098")); addressList.add(new Address("江苏省南京市玄武大道1001号","201001","1811989098")); User user = new User(1, "fishpro",addressList); //01 基本类型解析 Gson gson = new Gson(); int i = gson.fromJson("99", int.class); //100 double d = gson.fromJson("\"99.99\"", double.class); //99.99 boolean b = gson.fromJson("true", boolean.class); // true String str = gson.fromJson("String", String.class); // String System.out.println("int 类型:"+i); System.out.println("double 类型:"+d); System.out.println("boolean 类型:"+b); System.out.println("String 类型:"+str); //02 实体对象转 json str String rst=gson.toJson(user); System.out.println("实体对象转:"); System.out.println(rst); return user; } }
接上面 3.4.2 代码继续写
@RequestMapping("/user") @RestController public class UserController { @GetMapping("/get") public User get(){ List<Address> addressList=new ArrayList<>(); addressList.add(new Address("江苏省南京市玄武大道1000号","201001","1801989098")); addressList.add(new Address("江苏省南京市玄武大道1001号","201001","1811989098")); User user = new User(1, "fishpro",addressList); //01 基本类型解析 Gson gson = new Gson(); int i = gson.fromJson("99", int.class); //100 double d = gson.fromJson("\"99.99\"", double.class); //99.99 boolean b = gson.fromJson("true", boolean.class); // true String str = gson.fromJson("String", String.class); // String System.out.println("int 类型:"+i); System.out.println("double 类型:"+d); System.out.println("boolean 类型:"+b); System.out.println("String 类型:"+str); //02 实体对象转 json str String rst=gson.toJson(user); System.out.println("实体对象转:"); System.out.println(rst); //03 对象转实体 json fromJson User user2 = gson.fromJson(rst, User.class); System.out.println("对象转实体:"); System.out.println(user2); return user; } }
最后输出效果
类型:99 double 类型:99.99 boolean 类型:true String 类型:String 实体对象转: {"userId":1,"username":"fishpro","addresses":[{"street":"江苏省南京市玄武大道1000号","zipcode":"201001","mobile":"1801989098"},{"street":"江苏省南京市玄武大道1001号","zipcode":"201001","mobile":"1811989098"}],"created":{"year":2020,"month":2,"dayOfMonth":17,"hourOfDay":22,"minute":38,"second":30},"updated":{"year":2020,"month":2,"dayOfMonth":17,"hourOfDay":22,"minute":38,"second":30}} 对象转实体: com.fishpro.gsondemo.dto.User@ca30ffa
本文参考
我的亲爱的读者,若是您有问题能够联系我微信号 fishpro 或 qq号 502086 (qq号上的少)