【技術累積】【點】【java】【27】@JSONField

814386-20181030102602864-1082958472.png

@JSONField

該注解隸屬于阿里fastjson,方便fastjson處理對象時的一些操作

源碼

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER })
public @interface JSONField {/*** config encode/decode ordinal* @since 1.1.42* @return*/int ordinal() default 0;String name() default "";String format() default "";boolean serialize() default true;boolean deserialize() default true;SerializerFeature[] serialzeFeatures() default {};Feature[] parseFeatures() default {};String label() default "";/*** @since 1.2.12*/boolean jsonDirect() default false;/*** Serializer class to use for serializing associated value.* * @since 1.2.16*/Class<?> serializeUsing() default Void.class;/*** Deserializer class to use for deserializing associated value. * * @since 1.2.16 */Class<?> deserializeUsing() default Void.class;/*** @since 1.2.21* @return the alternative names of the field when it is deserialized*/String[] alternateNames() default {};/*** @since 1.2.31*/boolean unwrapped() default false;
}
  • ordinal() 順序設置。

    缺省fastjson序列化一個java bean,是根據fieldName的字母序進行序列化的,你可以通過ordinal指定字段的順序。這個特性需要1.1.42以上版本

  • name() 指定名字。指定后,序列化后字段名變為指定名稱,反序列化同理;
  • format() 指定日期格式;
  • serialize() deserialize() 是否序列化和反序列化,默認true。
  • serialzeFeatures() 序列化特性選擇,具體參考后面文章吧;通過枚舉選擇
  • parseFeatures() 解釋特性選擇;通過枚舉選擇
  • label() 打標記,可定制化輸出

@JSONField(label = "normal")public int getId() {return id;}public void setId(int id) {this.id = id;}@JSONField(label = "normal")public String getName() {return name;}
System.out.println(JSON.toJSONString(v, Labels.includes("normal")));
  • jsonDirect() 直接輸出而不經過json轉譯

    在fastjson-1.2.12版本中,JSONField支持一個新的配置項jsonDirect,它的用途是:當你有一個字段是字符串類型,里面是json格式數據,你希望直接輸入,而不是經過轉義之后再輸出。

  • serializeUsing() deserializeUsing() 指定序列化、反序列化使用自定義Serialize、Parser(注意,直接寫在類中即可,格式固定,關鍵是取值)

//示例1
public static class TimeStampDeserializer implements ObjectDeserializer {@Overridepublic <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {String time = parser.getLexer().stringVal();if (StringUtils.isBlank(time)) {return (T)String.valueOf(new Date().getTime());} else {return (T)(time + "000");}}@Overridepublic int getFastMatchToken() {return 0;}}//示例2
public static class Model {@JSONField(serializeUsing = ModelValueSerializer.class)public int value;
}public static class ModelValueSerializer implements ObjectSerializer {@Overridepublic void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,int features) throws IOException {Integer value = (Integer) object;String text = value + "元";serializer.write(text);}
}
  • alternateNames() 多名字。允許多個名字的變量轉成一個
@JSONField(alternateNames = {"user", "person"})
public String name;
  • unwrapped() 不封箱

搭配JSON.parseObject

給輸出結構體中field配置上@JSONField(name="aaa")等,直接轉出得到的json串

Response response = JSON.parseObject(res, Response.class);@Setter
@Getter
@NoArgsConstructor
@ToString
public class Response {@JSONField(name = "answerList")private List<Answer> answers;@JSONField(name = "timeStamp")private String timeStamp;@JSONField(name = "type")private String answerType;@JSONField(name = "id")private String erp;@JSONField(name = "session")private String sessionId;@JSONField(name = "topic")private String topic;@JSONField(deserialize = false, serialize = false)private String answerType = AnswerTypeEnum.ANSWER.getCode();
}

參考文章

  • Fastjson JSONField
  • JSONField_jsonDirect_cn
  • FastJson 自定義Serialize、Parser
  • fastjson使用(八) -- LabelFilter的使用
  • fastjson的@JSONField注解的一點問題
  • fastjson SerializerFeature詳解

轉載于:https://www.cnblogs.com/andy1202go/p/9875324.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279080.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279080.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279080.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

百度php editor圖片上傳到其他盤,百度編輯器Editor圖片獨立上傳

將百度編輯器中的圖片獨立出來上傳&#xff1a;html:代碼var myEditorImage,d,myEditorImage new UE.ui.Editor();myEditorImage.render(uploadid);myEditorImage.ready(function(){myEditorImage.setDisabled();myEditorImage.hide();//隱藏UE框體myEditorImage.addListener(…

感謝支持,超預期重印并加碼

今天&#xff0c;要向廣大讀者朋友帶來一個&#xff0c;連我自己和出版社都感到十分意外的好消息&#xff0c;幾天前接到出版社的通知&#xff0c;說今年元月出版的《Cisco/H3C交換機配置與管理完全手冊》&#xff08;第二版&#xff09;馬上就要下單重印了&#xff0c;而且一下…

如何從手機遠程控制uTorrent

You’re a geek on the go and it’s important to keep tabs on your torrents when you’re away from home. Today we take a peak at how you can monitor, manage, and even start your torrent downloads when you’re away from your computer. 您是旅途中的怪胎&#x…

洛谷P2463 Sandy的卡片【后綴數組】【二分】

題目描述 Sandy和Sue的熱衷于收集干脆面中的卡片。 然而&#xff0c;Sue收集卡片是因為卡片上漂亮的人物形象&#xff0c;而Sandy則是為了積攢卡片兌換超炫的人物模型。 每一張卡片都由一些數字進行標記&#xff0c;第i張卡片的序列長度為Mi&#xff0c;要想兌換人物模型&#…

php獲取一個文件名的函數,PHP 文件系統函數之獲取文件名及文件名后綴-php文件...

獲取文件名(包含擴展):1.用PHP 文件函數 basename獲取例&#xff1a;$filename "/home/httpd/html/index.php";$file basename($filename);2.先獲取位置再獲取文件名例:$filename "/home/httpd/html/index.php";$pos strrpos($filename, /);if ($pos …

tasker使用手冊_如何開始使用Tasker調整Android手機

tasker使用手冊Tasker is a powerful app for Android that lets you customize how your phone works and automate tasks. Unfortunately, it’s got a bit of a learning curve. We’re here to show you how to get started and turn your phone into a flashlight in the …

iPhone 軟件:xlate free 編碼的好幫手!

功能菜單&#xff1a; 1 文本 2 二進制 3 Char 值 4 Base64 5 反向 如果需要把一段中文編碼請選擇UTF16&#xff0c;如果是英文就選擇UTF8。對于需要經常使用編碼切換的朋友是個好幫手。 也可以用來簡單加密&#xff1a;我們先在文本狀態下輸入一段不想讓別人知道或需要保密的文…

linkbox php,win10 docker-toolsbox 搭建php開發環境的教程

下載鏡像docker pull mysql:5.7docker pull php:7.2-fpmdocker pull nginxdocker pull redis:3.2設置共享文件宿主機創建目錄E:\wnmp\mysql57\confE:\wnmp\mysql57\logE:\wnmp\php72\confE:\wnmp\php72\confE:\wnmp\nginx\confE:\wnmp\nginx\confE:\wnmp\wwwvmware設置文件共享…

sublime text3:提示 There are no packages available installation 解決方案

純屬記錄&#xff0c;下次能找到解決。 第一步&#xff1a; 在sublime Text3界面按 ctrl 出現一個輸入框界面 第二步&#xff1a;在輸入框輸入&#xff1a; import urllib.request,os,hashlib; h eb2297e1a458f27d836c04bb0cbaf282 d0e7a3098092775ccb37ca9d6b2e4b7d; pf Pa…

如何提取幻燈片表格_如何查看對Google文檔,表格或幻燈片文件的最新更改

如何提取幻燈片表格The Google Suite offers you a handy way to view all the changes that have occurred in a file on Google Docs, Sheets, or Slides. This is extremely useful when you’ve made lots of changes to a file or are working as part of a team and need…

[20171130]關于rman的一些總結.txt

[20171130]關于rman的一些總結.txt --//最近一直做rman相關測試,測試那個亂,沒辦法.無法從周圍的人獲得幫助,純粹是自己的亂猜,亂測,不知道別人是否能看懂我寫的東西. --//有必要做一些總結,不一定對,僅僅是我當前的看法. 1.數據文件備份集中,文件頭是最后寫到備份集文件的. 2.…

支付寶紅包php,支付寶紅包賞金跳轉源碼,一鍵復制紅包碼,裂變推廣

[html]代碼庫支付寶到店紅包搜索碼跳轉推廣裂變-引流*{padding:0;margin:0;}.main{overflow: hidden;}a {color:black;}.main img{width:100%;outline-width:0px;vertical-align:top;}.main{position: relative;}.main .copy-container{width: 100%;height: 0.42rem;position: …

apt-get更新軟件包_如何使用Apt-fast加速軟件包下載和更新

apt-get更新軟件包By Default, Ubuntu uses apt-get to install packages and updates. Apt-get is a good tool but you can get much faster download speeds using Apt-Fast when downloading and updating your Ubuntu box. 默認情況下&#xff0c;Ubuntu使用apt-get安裝軟…

FallbackFactory啟動的時候拋出異常

在Hystrix做熔斷的時候&#xff0c;開始用的是FallBack&#xff0c;后來為了找出為啥exception&#xff0c;然后就用了FallBackFactory。但是奇怪的是&#xff0c;一起動就拋出異常&#xff0c;真的是百思不得騎姐&#xff0c;錯了其解。后來在github上找到了解答&#xff1a;h…

制作首頁的顯示列表

1. 在首頁添加顯示問答的列表&#xff0c;并定義好相應的樣式。 無序列表 <ul > <li>Coffee</li> <li>Tea</li> <li>Milk</li> </ul> {% block body %}<div class"container"><div class"row clearfi…

php xxtea加密,php - esp32和php XXTEA字符串加密 - SO中文參考 - www.soinside.com

輸入具有不同的數據類型可能會導致此問題&#xff0c;因為當前沒有任何類型或范圍檢查的XXTEA實現。或者它可能是由于所涉及的兩臺計算機的不同端序行為&#xff0c;因為二進制文件通常存儲為由字節構造的字數組。或者可能是由于缺少正式加密特定字符串和密鑰的官方或標準參考示…

ipad iphone開發_如何在iPad或iPhone上使用外部GPS設備

ipad iphone開發If you bought a Wi-Fi only iPad and now you wish you could use GPS with it, this is the guide for you. Follow along to hook your iPad up to an external GPS unit and/or GPS-enabled smartphone phone. 如果您購買了僅支持Wi-Fi的iPad&#xff0c;現…

jQuery系列(十四):jQuery中的ajax

1、什么是ajax AJAX 異步的javascript和XML&#xff08;Asynchronous Javascript and XML&#xff09; 簡言之&#xff0c;在不重載整個網頁的情況下&#xff0c;AJAX通過后臺加載數據&#xff0c;并在網頁上進行顯示。 通過 jQuery AJAX 方法&#xff0c;您能夠使用 HTTP Get…

flex 布局以及樣式

1.Flex是Flexible Box的縮寫&#xff0c;意為”彈性布局”&#xff0c;用來為盒狀模型提供最大的靈活性2.任何一個容器都可以用flex布局&#xff08;注意&#xff0c;設為Flex布局以后&#xff0c;子元素的float、clear和vertical-align屬性將失效&#xff09; 采用Flex布局的元…

java swing列表數據加監聽,【Java Swing公開課|Java監聽列表項選擇事件怎么用,看完這篇文章你一定就會了】- 環球網校...

【摘要】作為一門面向對象編程語言&#xff0c;Java吸收了C語言的優點&#xff0c;也展現了其強大的一面&#xff0c;我們能在各個地方看到其功能強大和簡單易用的兩個特征&#xff0c;當然&#xff0c;也吸引了很多程序員的注意力&#xff0c;所以就有人想了解Java的相關內容&…