SpringMVC(十四):Jackson的注解使用

star2017 1年前 ⋅ 331 阅读

  SpringMVC默认自带 Jackson 支持 Json序列化,了解jackson的注解使用可以很方便自定义json字符串。

Jackson注解使用

日期格式化

  1. @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    作用在属性上,序列化时出参时,将Long型的时间值转化为指定格式的字符串类型的日期时间格式。

忽略/包含属性

  1. @JsonIgnore
    作用在属性上,该属性不参与序列化。
  2. @JsonIgnoreProperties(value = {"username","password"})
    作用在类上,不参与序列化的字段,序列化和反序列化都受影响。
  3. @JsonInclude(JsonInclude.Include.NON_NULL)
    作用在类上,序列化时不包含NULL值的属性,还有其它一些值:ALWAYS,ALWAYS,NON_DEFAULT,NON_EMPTY
  4. @JsonIgnoreType
    作用在类上,当该类作为其它类的属性时,该属性将被忽略。

定义别名

  1. @JsonProperty("loginname")
    作用在属性上,序列化输出时,使用别名, 如下:输出json串时,用的是loginname别名。

    @JsonProperty("loginname")
    private String loginName;
    
  2. @JsonSetter("loginname")
    作用在setter方法上,定义别名,类似与@JsonProperty,解决反序列化时json键名与实体类属性名不匹配问题。

排序

@JsonPropertyOrder(value = {"birthday","password"})
作用于类上,指定参与序列化的属性在json串中的顺序。

自定义序列化

  1. @JsonSerialize(using = Date2LongSerializer.class)
    作用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个 double 时在其后面限制两位小数点。

  2. @JsonDeserialize
    作用于属性或者setter方法上,用于在反序列化时可以嵌入我们自定义的代码,类似于上面的。
    自定义转换器:根据需要将数据格式化后的String类型数据返回给前台

    import java.io.IOException; 
    import java.text.SimpleDateFormat; 
    import java.util.Date; 
    
    import org.codehaus.jackson.JsonGenerator; 
    import org.codehaus.jackson.JsonProcessingException; 
    import org.codehaus.jackson.map.JsonSerializer; 
    import org.codehaus.jackson.map.SerializerProvider; 
    
    public class CustomDateSerializer extends JsonSerializer<Date> 
    { 
    
      @Override
      public void serialize(Date value, JsonGenerator jgen, 
          SerializerProvider provider) 
        throws IOException, JsonProcessingException 
      { 
        jgen.writeString(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(value)); 
      } 
    }
    

    实体类字段添加注解,将jackson在转换json的时候调用自定义的转换器

    @JsonSerialize(using = CustomDateSerializer.class) 
    private Date birthday;
    
更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: