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;