摘要:關(guān)于交互問題一交互的優(yōu)勢本來就是里的內(nèi)容客戶端可以很容易對數(shù)據(jù)解析數(shù)據(jù)格式簡單易于讀寫帶寬占用小不錯的可讀性可表示各類復(fù)雜性的數(shù)據(jù)。注解相當(dāng)于合在一起的作用。從上面返回結(jié)果可以發(fā)現(xiàn)兩個問題,第一許多為的字段也輸出。
SpringBoot關(guān)于JSON交互問題
一、Json交互的優(yōu)勢
1.JSON本來就是javascript里的內(nèi)容,客戶端可以很容易對JSON數(shù)據(jù)解析. 2.數(shù)據(jù)格式簡單、易于讀寫、帶寬占用小、不錯的可讀性、可表示各類復(fù)雜性的數(shù)據(jù)。 3.服務(wù)端也能直接使用JSON格式數(shù)據(jù),簡化了代碼開發(fā)量,易于維護(hù)。
二、SpringBoot之Controller中的使用
1.實際項目中,前后端分離成為主流趨勢,后臺負(fù)責(zé)業(yè)務(wù)邏輯處理,前端負(fù)責(zé)數(shù)據(jù)展示。后臺接口返回數(shù)據(jù)一般使用json格式,也可能使用xml。使用json報文。了解下面注解。
@Controller :處理http請求。 @ResponseBody :返回的結(jié)果直接寫入 HTTP 響應(yīng)正文,@Responsebody 后返回結(jié)果不會被解析為跳轉(zhuǎn)路徑, 直接寫入HTTP 響應(yīng)正文中。 @RestController :注解相當(dāng)于@ResponseBody + @Controller合在一起的作用。(Spring4之后新加的注解)。 @Controller @RequestMapping("/user") public class UsersController { @GetMapping("/getUser") @ResponseBody public User getUser() { User user=new User(); user.setId(24); user.setLoginName("Kobe"); user.setRealName("Bryant"); user.setPasswd("123456"); return user; } } 訪問url:http://localhost:9090/oms/user/getUser 返回結(jié)果: { "id": 24, "lastModifyUId": 0, "lastModifyTime": null, "lastLoginTime": null, "loginIP": null, "loginName": "Kobe", "nickName": null, "realName": "Bryant", "passwd": "123456", "phone": null, "email": null, "areaId": null, "areaName": null, "status": null, "onlineStatus": 0, "salt": null, "isPreinstall": 0, "roleIds": null, "roles": null, "userPermissions": null, "rememberMe": false }
三、SpringBoot的默認(rèn)JSON解析器(Jackson)
1.由上面例子可見并未做任何配置,返回值為User對象,直接轉(zhuǎn)換為JSON格式輸出。Spring-Boot對json做了默認(rèn)實現(xiàn),使用的是內(nèi)置Jackson轉(zhuǎn)換器。
2.從上面返回結(jié)果可以發(fā)現(xiàn)兩個問題,第一、許多為null的字段也輸出。第二、有些字段不想返回給前端(比如說密碼)。
1.在Bean類上添加注@JsonInclude(Include.NON_NULL)配置. @JsonInclude(Include.NON_NULL) public class User implements Serializable{ private static final long serialVersionUID = 1L; private int id; private int lastModifyUId; private Date lastModifyTime; private String lastLoginTime; //登陸時間 private String loginIP; //登陸IP private String loginName; ...... 其中枚舉類型屬性: 1.Include.Include.ALWAYS : 默認(rèn) 2.Include.NON_DEFAULT : 默認(rèn)值不序列化 3.Include.NON_EMPTY : 屬性為 空("") 或者為 NULL 都不序列化 4.Include.NON_NULL : 屬性為NULL 不序列化 返回結(jié)果: { "id": 24, "lastModifyUId": 0, "loginName": "Kobe", "realName": "Bryant", "passwd": "123456", "onlineStatus": 0, "isPreinstall": 0, "rememberMe": false } 2.從返回結(jié)果看值為null的字段沒有序列化,但是passwd還是返回出來.可以再Bean類的不需要序列化的字段上加@JsonIgnore注解. 返回結(jié)果: { "id": 24, "lastModifyUId": 0, "loginName": "Kobe", "realName": "Bryant", "onlineStatus": 0, "isPreinstall": 0, "rememberMe": false }
四、SpringBoot自定義JSON解析器(fastjson)
1.一般開發(fā)中習(xí)慣使用阿里的fastjson解析工具,fastjson具有極快的性能.fastjson是一個java庫集合,可以操作任何java對象,直接使用泛型.fastJson默認(rèn)將null的字段去除。
添加依賴(注意解決沖突)配置fastjson有兩種方式 第一種: ① 啟動類繼承 WebMvcConfigurerAdapter 。 ②覆蓋configureMessageConverters方法。 @SpringBootApplication //申明讓spring boot自動給程序進(jìn)行必要的配置 public class AppStart extends WebMvcConfigurerAdapter { public static void main(String[] args) { SpringApplication.run(AppStart.class, args); } /** * 替換框架json為fastjson */ @Override public void configureMessageConverters(List com.alibaba fastjson 1.2.47 > converters) { super.configureMessageConverters(converters); FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures( SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteNullStringAsEmpty ); // 處理中文亂碼問題 List fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastConverter.setSupportedMediaTypes(fastMediaTypes); fastConverter.setFastJsonConfig(fastJsonConfig); //處理字符串, 避免直接返回字符串的時候被添加了引號 StringHttpMessageConverter smc = new StringHttpMessageConverter(Charset.forName("UTF-8")); converters.add(smc); converters.add(fastConverter); } }
第二種:
@Bean注入第三方的json解析框架 @Bean//使用@Bean注入fastJsonHttpMessageConvert public HttpMessageConverters fastJsonHttpMessageConverters(){ //1.需要定義一個Convert轉(zhuǎn)換消息的對象 FastJsonHttpMessageConverter fastConverter=new FastJsonHttpMessageConverter(); //2.添加fastjson的配置信息,比如是否要格式化返回的json數(shù)據(jù) FastJsonConfig fastJsonConfig=new FastJsonConfig(); //SerializerFeature.WriteMapNullValue序列化null的字段 fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); //3.在convert中添加配置信息 fastConverter.setFastJsonConfig(fastJsonConfig); HttpMessageConverter> converter=fastConverter; return new HttpMessageConverters(converter); }
實體類中不需要序列化的字段可添加注解@JSONField(serialize=false)。
如果需要序列化null的字段,也可進(jìn)行配置。具體可查閱fastJson的配置。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/76514.html
摘要:一在文件中引入二配置地址等配置數(shù)據(jù)庫索引默認(rèn)為服務(wù)器地址服務(wù)器連接端口服務(wù)器連接密碼默認(rèn)為空連接池最大連接數(shù)使用負(fù)值表示沒有限制連接池最大阻塞等待時間使用負(fù)值表示沒有限制連接池中的最大空閑連接連接池中的最小空閑連接連接超時時 一、在pom文件中引入redis org.springframework.boot spring-boot-starter-redis ...
摘要:什么是是一個管理和監(jiān)控你的應(yīng)用程序的應(yīng)用程序。這些應(yīng)用程序通過通過注冊或者使用例如發(fā)現(xiàn)。剛才首頁的應(yīng)用列表后面有個紅色的,我們可以將注冊上去的應(yīng)用移除,但是只要你不把程序停掉,它立馬又會注冊上去。 showImg(http://ww3.sinaimg.cn/large/006tNc79ly1g5h6jqpgs9j30u00gwdhe.jpg); 什么是 SpringBoot Admin...
摘要:項目編號開發(fā)工具數(shù)據(jù)庫基于實現(xiàn)在的打印平臺,用戶注冊后在線提交要打印的各種文檔,管理員在后可以下載打印進(jìn)行發(fā)貨等。 項目編號:BS-PT-004 開發(fā)工具:IDEA / ECLIPSE 數(shù)據(jù)庫:MYSQL5.7 TOMCAT: 8.5.31 JDK: 1.8 基于SpringBoot+s...
摘要:最近使用開發(fā)了一款應(yīng)用,這里主要記錄開發(fā)調(diào)試打包的過程及做法。調(diào)用中的命令構(gòu)建??梢酝ㄟ^命令啟動。至此基礎(chǔ)配置就差不多是這樣打包發(fā)布就可以直接通過。發(fā)布時我們無需修改任何配置及代碼,與開發(fā)環(huán)境是一致。 最近使用springboot, vue, webpack開發(fā)了一款SPA應(yīng)用,這里主要記錄開發(fā)+調(diào)試+打包的過程及做法。使用的技術(shù)gradlespringbootvue.jswebpac...
閱讀 1990·2023-04-26 01:58
閱讀 2070·2019-08-30 11:26
閱讀 2796·2019-08-29 12:51
閱讀 3569·2019-08-29 11:11
閱讀 1236·2019-08-26 11:54
閱讀 2170·2019-08-26 11:48
閱讀 3539·2019-08-26 10:23
閱讀 2462·2019-08-23 18:30