該註解隸屬於阿里fastjson,方便fastjson處理對象時的一些操做html
源碼java
@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() 順序設置。git
缺省fastjson序列化一個java bean,是根據fieldName的字母序進行序列化的,你能夠經過ordinal指定字段的順序。這個特性須要1.1.42以上版本github
label() 打標記,可定製化輸出json
@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轉譯session
在fastjson-1.2.12版本中,JSONField支持一個新的配置項jsonDirect,它的用途是:當你有一個字段是字符串類型,裏面是json格式數據,你但願直接輸入,而不是通過轉義以後再輸出。app
serializeUsing() deserializeUsing() 指定序列化、反序列化使用自定義Serialize、Parser(注意,直接寫在類中便可,格式固定,關鍵是取值)ide
//示例1 public static class TimeStampDeserializer implements ObjectDeserializer { @Override public <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"); } } @Override public int getFastMatchToken() { return 0; } } //示例2 public static class Model { @JSONField(serializeUsing = ModelValueSerializer.class) public int value; } public static class ModelValueSerializer implements ObjectSerializer { @Override public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException { Integer value = (Integer) object; String text = value + "元"; serializer.write(text); } }
@JSONField(alternateNames = {"user", "person"}) public String name;
給輸出結構體中field配置上@JSONField(name="aaa")等,直接轉出獲得的json串this
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(); }