@JsonAlias 和 @JsonProperty
前言
使用场景:主要运用于参数映射。
如:将admin_id 的值赋予adminId
常用于:接收第三方参数,并对参数进行驼峰化或别名。
一、@JsonAlias
是在反序列化的时候可以让Bean的属性接收多个json字段的名称。
@JsonAlias({
"admin_id","id"})
private Long adminId;
此时:可以将响应/请求参数里的admin_id、id、adminId的值赋予对象adminId上。
参数为:
{
"id": 789,
"adminId":123,
"admin_id":456
}
优先级为:取最下面的参数,这里是取admin_id
当有两个属性用到了id时:
@JsonAlias({
"admin_id","id"})
private Long adminId;
@JsonProperty("name")
private String adminName;
@JsonAlias("id")
private String adminAddress;
参数为:
{
"adminId": 123,
"id": 789,
"admin_name": "qqq",
"name": "zzz",
"admin_address": "aaa"
}
打印结果为:
{
"adminAddress":"789","adminId":123,"adminName":"zzz"}
尽量避免重复使用,难以维护。
二、@JsonProperty
更改Bean字段的属性名,效果基本上面一样。
但是只支持匹配一个字段.
@JsonProperty("name")
private String adminName;
只匹配:name
adminName有值也不会匹配
参数:
{
"admin_name": "qqq",
"name": "zzz",
"adminName":"okm"
}
打印结果:
{
"adminName":"zzz"}
参数:
{
"admin_name": "qqq",
"adminName":"okm"
}
打印结果:
{
}
至于@JsonProperty(value = “name”, access = JsonProperty.Access.READ_ONLY)
access的几种使用,一般开发不会用到。
Access.WRITE_ONLY:只在序列化时使用修改后的字段
Access.READ_ONLY:只在反序列化时使用,类似于@JsonAlias注解
Access.READ_WRITE:在序列化和反序列化都使用修改后字段
Access.AUTO:自动确定,和READ_WRITE一样效果
总结
简单列举了下@JsonAlias 和 @JsonProperty的使用。
个人在开发中常用的是:@JsonAlias
因为会和python系统做对接,pythod的返回值有些很古老(蛇型、驼峰都有)。
@JsonAlias("admin_address")
private String adminAddress;
这么些就可以取到admin_address、adminAddress。总归有一个应该有值。