国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 一些簡化定義和轉(zhuǎn)換Java Bean的一些小技巧

一些簡化定義和轉(zhuǎn)換Java Bean的一些小技巧

2021-06-18 23:36碼農(nóng)小胖哥 Java教程

本文主要分享一些簡化定義和轉(zhuǎn)換Java Bean的一些小技巧,有需要的朋友可以參考下

一些簡化定義和轉(zhuǎn)換Java Bean的一些小技巧

今天在封裝第三方應(yīng)用的開放接口,寫了很多返回值的類,這些類很多都是結(jié)構(gòu)相似只是個(gè)別字段名稱不一樣。為了單獨(dú)的字段就要復(fù)制一個(gè)改改不勝其煩,而且起名是最頭疼的事情。就像下面這兩個(gè):

  1. @EqualsAndHashCode(callSuper = true
  2. @Data 
  3. public class SimpleUserResponse extends WeComResponse { 
  4.     private List<SimpleUser> userlist; 
  5.  
  6. @EqualsAndHashCode(callSuper = true
  7. @Data 
  8. public class UserDetailResponse extends WeComResponse { 
  9.     private List<UserDetail> userlist; 

是不是差不多?于是就利用泛型將它們合并了:

  1. @EqualsAndHashCode(callSuper = true
  2. @Data 
  3. public class UserResponse<T> extends WeComResponse { 
  4.     private List<T> userlist; 

這樣通過UserResponse和UserResponse就能定義他們了,簡化了不少代碼。不過沒多久又來了一個(gè)類:

  1. @EqualsAndHashCode(callSuper = true
  2. @Data 
  3. public class QrCodeResponse extends WeComResponse { 
  4.     private String qrcode; 

這個(gè)結(jié)構(gòu)其實(shí)也差不多啊,如果把UserResponse進(jìn)一步改造成:

  1. @EqualsAndHashCode(callSuper = true
  2. @Data 
  3. public class OjbectResponse<T> extends WeComResponse { 
  4.     private T userlist; 

似乎OjbectResponse就等同于QrCodeResponse。不過單純這樣搞是不行的,細(xì)心的同學(xué)會(huì)發(fā)現(xiàn)它們的屬性名稱不一樣,一個(gè)是qrcode;一個(gè)是userlist。如果能起個(gè)別名就好了!我似乎有了一個(gè)解決方案。

如果是類型轉(zhuǎn)換

 

Bean類型轉(zhuǎn)換的話,用Mapstruct就能解決這個(gè)問題,最終我們把屬性名稱定義為data:

  1. @Mapping(target = "data", source = "qrcode"
  2.   @Mapping(target = "data", source = "userlist"

通過上面的兩個(gè)注解映射編寫兩個(gè)轉(zhuǎn)換接口就解決了。關(guān)于Mapstruct可以看我相關(guān)的講解文章。

如果是反序列化

 

Jackson提供了一個(gè)別名注解@JsonAlias,可以讓字段屬性名稱接受更多的別名。就像這樣:

  1. @EqualsAndHashCode(callSuper = true
  2. @Data 
  3. public class OjbectResponse<T> extends WeComResponse { 
  4.     @JsonAlias({"qrcode","userlist"}) 
  5.     private T data; 

那么下面這個(gè)json能映射到OjbectResponse中:

  1.     "qrcode":"https://felord.cn/myqr.png" 

這個(gè)會(huì)映射到OjbectResponse

  1.  "userlist":[{"username":"felord.cn"},{"username":"felordcn"},{"username":"felord"}] 

到這里可能大家會(huì)有疑問:Jackson是如何處理泛型問題的?

如何獲取泛型的Class類型

 

通過直接手段是無法獲取泛型的Class類型的,不過我們可以獲取到泛型的抽象定義java.lang.reflect.ParameterizedType,直接使用ParameterizedType會(huì)不太方便。所以在Jackson中可以通過TypeReference來處理泛型問題。如果我們需要反序列化OjbectResponse我們可以:

  1. ObjectMapper objectMapper = new ObjectMapper(); 
  2. String json = "{\"qrcode\":\"https://felord.cn/myqr.png\"}"
  3. OjbectResponse<String> obj = objectMapper.readValue(json,new TypeReference<OjbectResponse<String>>(){}); 

其實(shí)對(duì)應(yīng)的Spring也提供了類似的工具類org.springframework.core.ParameterizedTypeReference,特別是如果你使用了RestTemplate來請(qǐng)求第三方的時(shí)候會(huì)用到這個(gè)泛型處理工具。

原文鏈接:https://mp.weixin.qq.com/s/XQT8Qrx9yQdjjKNHGsfePQ

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 天天干狠狠干 | 免费在线看污视频 | www.中文字幕 | 欧美久久久 | 色a视频 | h视频免费观看 | 中文字幕一区二区三区精彩视频 | 久草福利资源 | 一区自拍| 不用播放器的av | 天天射天天干 | 中文字幕免费看 | 国产欧美视频一区二区三区 | 91精品国产日韩91久久久久久 | 国产在线精品一区二区 | 美国成人在线 | 日韩在线中文字幕 | 韩国久久| 黄色视屏在线免费观看 | 午夜日韩| 久久国产一区 | 日韩一区二区在线观看 | 精品影院 | 国产精品久久久久久久一区探花 | 久久久久久久久99精品 | 国产中文一区二区三区 | 一区二区精品 | 成人激情在线 | 91精品国产综合久久福利软件 | av网站免费 | 欧美久久久| 亚洲精品一区在线 | 天天综合视频网 | 久草在线 | 精品久久精品久久 | 91cn在线观看 | 久久一区二 | 国产一区二区三区撒尿在线 | 亚洲日本乱码一区两区在线观看 | 亚洲一级毛片 | 成人在线精品视频 |