找做模型方案去哪个网站,电脑路由器做网站服务器吗,国外做无纺布的网站,不用交钱的夜间禁用app参考资料
Jackson使い方メモ 目录 一. JsonIgnore二. JsonIgnoreProperties三. JsonProperty3.1 作用于entity属性上#xff0c;指定json对象属性名3.2 作用于entity方法上#xff0c;指定json对象属性名 四. JsonFormat4.1 日期格式化4.2 数字格式化4.3 枚举类返回code 五.…参考资料
Jackson使い方メモ 目录 一. JsonIgnore二. JsonIgnoreProperties三. JsonProperty3.1 作用于entity属性上指定json对象属性名3.2 作用于entity方法上指定json对象属性名 四. JsonFormat4.1 日期格式化4.2 数字格式化4.3 枚举类返回code 五. JsonCreator注解 枚举类接收前台提交数据5.1 枚举类和接收数据entity的定义5.2 后台枚举类接收前台的数据5.3 后台枚举类型的数据返回给前台 六. JsonAlias七. JsonInclude 一. JsonIgnore
在序列化和反序列化 JSON 数据时忽略指定的属性。
import com.fasterxml.jackson.annotation.*;
import lombok.Data;Data
public class Test34Entity {JsonIgnoreprivate String id;private String name;private String content;
}返回数据给前台
PostMapping(/get_data)
public ResponseEntityTest34Entity getData(RequestBody Test34Entity data) {Test34Entity entity new Test34Entity();// 在此处设定了id属性entity.setId(1355930);entity.setName(贾飞天);entity.setContent(内容);return ResponseEntity.ok(entity);
}⏹由于给id属性添加了JsonIgnore注解所以id并没有返回给前台。 二. JsonIgnoreProperties
同时指定多个需要忽略的属性
import com.fasterxml.jackson.annotation.*;
import lombok.Data;Data
JsonIgnoreProperties({id, content})
public class Test34Entity {private String id;private String name;private String content;
}⏹可以看到因为id和content属性被忽略所以只有name属性被返回到了前台。 三. JsonProperty
3.1 作用于entity属性上指定json对象属性名
⏹由下图可知当前台json的属性值和后台实体类属性值不匹配时可使用JsonProperty指定 3.2 作用于entity方法上指定json对象属性名
⏹部分属性值后台需要根据既存的属性经过业务判断处理后返回前台且该属性值最终只有前台需要后台的业务逻辑中并不需要此时可以将JsonProperty注解作用于方法上用来指定该属性
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;import java.util.Optional;Data
public class Test34Entity {private String firstName;private String lastName;// 后台不需要该属性,只有前台才需要此属性// private String fullName;// 指定该方法的返回值作为json的属性,属性名为fullnameJsonProperty(fullName)private String getFullName() {return Optional.ofNullable(this.firstName).orElse() Optional.ofNullable(this.lastName).orElse();}
}⏹如下图所示在返回给前台的时候fullName也被返回。 四. JsonFormat
4.1 日期格式化
在Date和YearMonth属性上指定日期字符串的格式
import com.fasterxml.jackson.annotation.*;
import lombok.Data;import java.time.YearMonth;
import java.util.Date;Data
public class Test34Entity {JsonFormat(pattern yyyy/MM/dd)private Date birthday;JsonFormat(pattern yyyy/MM)private YearMonth yearMonth;
}⏹由下图可知日期字符串转换为java实体类中的日期属性类型 4.2 数字格式化
指定序列化时的数据类型返回前台的数据类型
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;import java.math.BigDecimal;Data
public class Test34Entity {// 指定序列化时的数据类型是字符串JsonFormat(shape JsonFormat.Shape.STRING)private BigDecimal num1;JsonFormat(shape JsonFormat.Shape.STRING)private Integer num2;// 未指定序列化时的数据类型private BigDecimal num3;private Integer num4;
}⏹可以看到指定了 JsonFormat(shape JsonFormat.Shape.STRING)注解的属性返回前台时的数据类型变为字符串类型。 4.3 枚举类返回code
详情请参考 5.3 后台枚举类型的数据返回给前台
五. JsonCreator注解 枚举类接收前台提交数据
5.1 枚举类和接收数据entity的定义
⏹定义一个枚举类
Jackson根据JsonCreator注解所作用的枚举类中的方法将前台提交的数据转换为枚举类对象fromName方法只是为了根据枚举类的name获取枚举类对象和枚举类序列化反序列化没有关系
import com.fasterxml.jackson.annotation.JsonCreator;
import java.util.Arrays;public enum SexTypes {男性(1),女性(2),保密(3);private String code;SexTypes(String code) {this.code code;}public String getCode() {return code;}/*根据code获取枚举类对象SpringBoot在将前台数据封装的时候,通过JsonCreator注解对应的方法指定前台的性别code转换为对应的枚举类*/ JsonCreatorpublic static SexTypes fromCode(String code) {return Arrays.stream(SexTypes.values()).filter(item - item.code.equals(code)).findAny().orElse(null);}public static SexTypes fromName(String name) {return Arrays.stream(SexTypes.values()).filter(item - item.name().equals(name)).findAny().orElse(null);}
}⏹用来接收前台提交到后台数据的entity
import com.example.jmw.common.enums.SexTypes;
import lombok.Data;Data
public class Test34Entity {private String id;// 自定义的枚举类private SexTypes sexTypes;
}5.2 后台枚举类接收前台的数据 5.3 后台枚举类型的数据返回给前台
⏹在不做任何配置的情况下默认返回前台的数据是枚举类的名称 ⏹在枚举类上配置JsonFormat(shape JsonFormat.Shape.OBJECT)返回给前台的是枚举类的code
JsonFormat(shape JsonFormat.Shape.OBJECT)
public enum SexTypes {男性(1),女性(2),保密(3);// ...以下代码省略...JsonCreatorpublic static SexTypes fromCode(String code) {return Arrays.stream(SexTypes.values()).filter(item - item.code.equals(code)).findAny().orElse(null);}
}⏹效果如下所示返回的是枚举类的code 六. JsonAlias
作用于实体类的属性上被标记的属性可以同时接受多个指定的key
import com.fasterxml.jackson.annotation.JsonAlias;
import lombok.Data;Data
public class Test34Entity {// id 和 userId 都将被封装到此处JsonAlias({userId})private String id;JsonAlias({userName})private String name;
}⏹效果如下所示前台json中的key是userId后台entity的属性值是id但是通过JsonAlias注解指定了别名userId所以成功接受到数据。 七. JsonInclude
JsonInclude.Include.NON_NULL指定返回的数据中仅包含非null的数据
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;Data
JsonInclude(JsonInclude.Include.NON_NULL)
public class Test34Entity {private String id;private String name;private String content;
}⏹由下图可知content属性为null但是因为通过JsonInclude(JsonInclude.Include.NON_NULL)的指定所以值为null的属性压根就没有返回到前台。