Java中如何使用@JsonDeserialize注解实现自定义反序列化呢?

戚薇 fastjson 发布时间:2023-05-25 08:12:46 阅读数:11814 1
下文笔者讲述@JsonDeserialize注解应用到JSON序列化的示例分享,如下所示

@JsonDeserialize注解的功能简介

@JsonDeserialize注解:
    将JSON反序列化为Java对象时声明自定义反序列化器
	  可通过使用泛型类型User 继承 StdDeserializer 类来实现自定义反序列化器
       此时需要重写StdDeserializer类的deserialize()方法

@JsonDeserialize注解的语法

@Target(value={ANNOTATION_TYPE,METHOD,FIELD,TYPE,PARAMETER})
@Retention(value=Runtime)
public @interface JsonDeserialize

@JsonDeserialize注解的示例

import java.io.*;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.deser.std.*;
public class JsonDeSerializeAnnotationTest {
   public static void main (String[] args) throws JsonProcessingException, IOException {
      User user = new User(888, "maomao");
      ObjectMapper mapper = new ObjectMapper();
      String jsonString = mapper.writeValueAsString(user);
      user = mapper.readValue(jsonString, User.class);
      System.out.println(user);
   }
}
// CustomDeserializer 类
class CustomDeserializer extends StdDeserializer<User> {
   public CustomDeserializer(Class<User> t) {
      super(t);
   }
   public CustomDeserializer() {
      this(User.class);
   }
   @Override
   public User deserialize(JsonParser jp, DeserializationContext dc) throws IOException, JsonProcessingException
   {
      int id = 0;
      String name = null;
      JsonToken currentToken = null;
      while((currentToken = jp.nextValue()) != null) {
         switch(currentToken) {
            case VALUE_NUMBER_INT:
            if(jp.getCurrentName().equals("id")) {
               id = jp.getIntValue();
            }
            break;
            case VALUE_STRING:
            switch(jp.getCurrentName()) {
               case "name":
               name = jp.getText();
               break;
               default:
               break;
            }
            break;
            default:
            break;
         }
      }
      return new User(id, name);
   }
}



// User 类
@JsonDeserialize(using=CustomDeserializer.class)
class User {
   private int id;
   private String name;
   public User(int id, String name) {
      this.id = id;
      this.name = name;
   }
   public int getId() {
      return id;
   }
   public String getName() {
      return name;
   }
   @Override
   public String toString() {
      StringBuilder sb = new StringBuilder("ID: ").append(this.id).append("\nName: ").append(this.name);
      return sb.toString();
   }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/fastjson/2023/6623.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者