美文网首页
JSON 常用注解

JSON 常用注解

作者: sayonara_yoyo | 来源:发表于2017-07-26 11:47 被阅读0次

    摘自:Jackson注解学习参考

    初级用法

    属性重命名

    作用: 改变某个成员属性使用的JSON名称

    public class Name{
        @JsonProperty("firstName")
        public String _first_name;
    }
    

    将会生成如下所示的JSON数据结果:

    {"firstName":"Bob"}
    

    忽略属性使用的注解

    1. POJO中包含不想输出的属性时使用
    public class Value{
      public int value;
      @JsonIgnore public int internalValue;
    }
    

    此时得到的JSON数据结果如下

    {"value":42}
    
    1. 忽略JSON数据中得到的属性
    @JsonIgnoreProperties("extra","uselessValue")
    public class Value{
      public int value;
    }
    

    忽略掉没有完全匹配的JSON属性

    @JsonIgnoreProperties(ignoreUnknow=true)
    public class PojoWithAny{
      public int value;
    }
    

    序列化输出指定类型

    1. 读取时(反序列化),声明的类型可能是一个基本类型,但是你确切的知道应该使用的实现类型(生成实现类的对象);
    public class ValueContainer{
      @JsonDeserialize(as=ValueImpl.class)
      public Value value;
    }
    
    1. 输出时,Json默认使用给定的运行时类型(),但是可以不输出该类的所有信息,只输出该类型父类囊括的信息
    public class ValueTest{
      @JsonSerialize(as=BasicType.class)
      //或者输出@JsonSerialize(typing=Typing.STATIC)
      public BasicType another;
    }
    

    中级用法

    使用构造器或工厂方法

    默认情况下,由JSON数据创建对应的实例时,Jackson默认使用该类的默认构造器创建实例.通过@JsonCreator注解可以指定其他实例化方法,还可以使用@JsonProperty绑定名称

    public class CrtPOJO{
      private int _x,_y;
      @JsonCreator
      public CrtPOJO(@JsonProperty("x") int x,@JsonProperty("y") int y){
        _x = x;
        _y = y;
      }
    }
    

    相同的方法还可以使用在静态工厂方法上,不过还有一个可选的方案,称为授权式构建器(dalegating creator):

    public class DelegetingPOJO{
      private int _x,_y;
      @JsonCreator
      public DelegetingPOJO(Map<String,Object> delegate){
        _x = (Integer)delegate.get("x");
        _y = (Integer)delegate.get("y");
      }
    }
    

    设置属性的自动发现

    @JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY)


    FINISH

    相关文章

      网友评论

          本文标题:JSON 常用注解

          本文链接:https://www.haomeiwen.com/subject/nnbnkxtx.html