fastjson在springboot(springmvc)中的应用

fastJson 是阿里提供一款非常好的对象与json相互转换的工具,在springboot(spring)中的应用非常广泛,如在编写api接口的时候,经常会用到将实体类转成json,以供第三方使用。

在工作中,有以下集中应用场景:

1.如果对象的某个属性值为null,则改属性不参与序列化,生成的Json结果也不包含该属性,可以使用

@JsonInclude(value=Include.NON_NULL)

如:

 1 @JsonInclude(value=Include.NON_NULL)
 2 public class SysUser implements Serializable {
 3 
 4     private static final long serialVersionUID = 1L;
 5 
 6     /**
 7      * 主键code
 8      */
 9     @TableId(value = "user_id", type = IdType.AUTO)
10     private Integer userId;
11 }

说明:value=Include.NON_NULL 表示null不序列化(不显示),value=Include.NON_EMPTY表示""和null都不序列化,也不显示

2.如果对象某个Boolean属性,如Sex,序列化结果为{"sex":true}或者{"sex":false},但是我们希望当sex=true时,序列化结果为1,否则为0

需要定义一个boolean类型的序列化器来解决

/**
 * 自定义布尔序列化器
 *
 * 
 */
public class BooleanSerializer extends JsonSerializer<Boolean> {
 
    @Override
    public void serialize(Boolean value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
        if (Boolean.FALSE.equals(value)){
            jgen.writeNumber(0);
        }else{
            jgen.writeNumber(1);
        }
    }
    
}

在属性上加上如下的注解:

 @JsonSerialize(using = BooleanSerializer.class)
 private Boolean Sex;

3.序列化是,日期Date默认是专为UTC的时间错,可以通过JsonFormat转化成我们想要的日期字符串

    @JsonFormat(pattern="yyyy-MM-dd HH:mm", timezone="GMT+8")
    private Date regisDate; //注册时间

表示日期为+8时区的年月日时分

4.接收json的时候忽略类中不存在的字段,否则会报异常,作用在类上

@JsonIgnoreProperties(ignoreUnknown = true) 

@JsonIgnoreProperties(ignoreUnknown = true) 
public class SysUser implements Serializable {
  
     private static final long serialVersionUID = 1L;
 
     /**
      * 主键code
      */
     @TableId(value = "user_id", type = IdType.AUTO)
     private Integer userId;
 }

5.如果客户中序列化的字段和类中的字段不一样,如json中的user_id的值要插入到类中userId,此时就需要用到

@JsonProperty

如:

 

@JsonProperty("user_id")
private Integer userId;

 

posted on 2019-03-14 17:22  lizongti  阅读(745)  评论(0编辑  收藏  举报