@JsonAlias 和 @JsonProperty的使用

@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。总归有一个应该有值。

猜你喜欢

转载自blog.csdn.net/qq_37700773/article/details/130655643