日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

【技术累积】【点】【java】【27】@JSONField

發布時間:2023/12/9 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【技术累积】【点】【java】【27】@JSONField 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

@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

總結

以上是生活随笔為你收集整理的【技术累积】【点】【java】【27】@JSONField的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。