使用 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號上的少)