摘要:關于交互問題一交互的優勢本來就是里的內容客戶端可以很容易對數據解析數據格式簡單易于讀寫帶寬占用小不錯的可讀性可表示各類復雜性的數據。注解相當于合在一起的作用。從上面返回結果可以發現兩個問題,第一許多為的字段也輸出。
SpringBoot關于JSON交互問題
一、Json交互的優勢
</>復制代碼
1.JSON本來就是javascript里的內容,客戶端可以很容易對JSON數據解析.
2.數據格式簡單、易于讀寫、帶寬占用小、不錯的可讀性、可表示各類復雜性的數據。
3.服務端也能直接使用JSON格式數據,簡化了代碼開發量,易于維護。
二、SpringBoot之Controller中的使用
1.實際項目中,前后端分離成為主流趨勢,后臺負責業務邏輯處理,前端負責數據展示。后臺接口返回數據一般使用json格式,也可能使用xml。使用json報文。了解下面注解。
</>復制代碼
@Controller :處理http請求。
@ResponseBody :返回的結果直接寫入 HTTP 響應正文,@Responsebody 后返回結果不會被解析為跳轉路徑, 直接寫入HTTP 響應正文中。
@RestController :注解相當于@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
返回結果:
{
"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的默認JSON解析器(Jackson)
1.由上面例子可見并未做任何配置,返回值為User對象,直接轉換為JSON格式輸出。Spring-Boot對json做了默認實現,使用的是內置Jackson轉換器。
2.從上面返回結果可以發現兩個問題,第一、許多為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 : 默認
2.Include.NON_DEFAULT : 默認值不序列化
3.Include.NON_EMPTY : 屬性為 空("") 或者為 NULL 都不序列化
4.Include.NON_NULL : 屬性為NULL 不序列化
返回結果:
{
"id": 24,
"lastModifyUId": 0,
"loginName": "Kobe",
"realName": "Bryant",
"passwd": "123456",
"onlineStatus": 0,
"isPreinstall": 0,
"rememberMe": false
}
2.從返回結果看值為null的字段沒有序列化,但是passwd還是返回出來.可以再Bean類的不需要序列化的字段上加@JsonIgnore注解.
返回結果:
{
"id": 24,
"lastModifyUId": 0,
"loginName": "Kobe",
"realName": "Bryant",
"onlineStatus": 0,
"isPreinstall": 0,
"rememberMe": false
}
四、SpringBoot自定義JSON解析器(fastjson)
1.一般開發中習慣使用阿里的fastjson解析工具,fastjson具有極快的性能.fastjson是一個java庫集合,可以操作任何java對象,直接使用泛型.fastJson默認將null的字段去除。
</>復制代碼
添加依賴(注意解決沖突)
com.alibaba
fastjson
1.2.47
配置fastjson有兩種方式
第一種:
① 啟動類繼承 WebMvcConfigurerAdapter 。
②覆蓋configureMessageConverters方法。
@SpringBootApplication //申明讓spring boot自動給程序進行必要的配置
public class AppStart extends WebMvcConfigurerAdapter {
public static void main(String[] args) {
SpringApplication.run(AppStart.class, args);
}
/**
* 替換框架json為fastjson
*/
@Override
public void configureMessageConverters(List> 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轉換消息的對象
FastJsonHttpMessageConverter fastConverter=new FastJsonHttpMessageConverter();
//2.添加fastjson的配置信息,比如是否要格式化返回的json數據
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的字段,也可進行配置。具體可查閱fastJson的配置。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76514.html
摘要:一在文件中引入二配置地址等配置數據庫索引默認為服務器地址服務器連接端口服務器連接密碼默認為空連接池最大連接數使用負值表示沒有限制連接池最大阻塞等待時間使用負值表示沒有限制連接池中的最大空閑連接連接池中的最小空閑連接連接超時時 一、在pom文件中引入redis org.springframework.boot spring-boot-starter-redis ...
摘要:什么是是一個管理和監控你的應用程序的應用程序。這些應用程序通過通過注冊或者使用例如發現。剛才首頁的應用列表后面有個紅色的,我們可以將注冊上去的應用移除,但是只要你不把程序停掉,它立馬又會注冊上去。 showImg(http://ww3.sinaimg.cn/large/006tNc79ly1g5h6jqpgs9j30u00gwdhe.jpg); 什么是 SpringBoot Admin...
摘要:項目編號開發工具數據庫基于實現在的打印平臺,用戶注冊后在線提交要打印的各種文檔,管理員在后可以下載打印進行發貨等。 項目編號:BS-PT-004 開發工具:IDEA / ECLIPSE 數據庫:MYSQL5.7 TOMCAT: 8.5.31 JDK: 1.8 基于SpringBoot+s...
摘要:最近使用開發了一款應用,這里主要記錄開發調試打包的過程及做法。調用中的命令構建。可以通過命令啟動。至此基礎配置就差不多是這樣打包發布就可以直接通過。發布時我們無需修改任何配置及代碼,與開發環境是一致。 最近使用springboot, vue, webpack開發了一款SPA應用,這里主要記錄開發+調試+打包的過程及做法。使用的技術gradlespringbootvue.jswebpac...
閱讀 1864·2023-04-26 01:58
閱讀 1989·2019-08-30 11:26
閱讀 2735·2019-08-29 12:51
閱讀 3500·2019-08-29 11:11
閱讀 1187·2019-08-26 11:54
閱讀 2103·2019-08-26 11:48
閱讀 3485·2019-08-26 10:23
閱讀 2390·2019-08-23 18:30