jackson jsonproperty注解

gcuhipw9  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(352)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

四天前关门了。
改进这个问题
当与变量vs getters/setters一起使用时,jsonproperty是如何工作的?
例如,
情况1-@jsonproperty变量

class Shape {

@JsonProperty("area")
AreaCalculation area;

public AreaCalculation getArea(){
    return area;
}

public AreaCalculation setArea(AreaCalculation area) {
    this.area = area;
}

json响应(2个属性-1如预期,另一个是类名称的snakecase):

{
    "area" : {
        "data":"100"
    },
    "area_calculation": {
        "data":"100"
    }
}

场景2-@jsonproperty在getter/setters上

class Shape {

AreaCalculation area;

@JsonProperty("area")
public AreaCalculation getArea(){
    return area;
}

@JsonProperty("area")
public AreaCalculation setArea(AreaCalculation area) {
    this.area = area;
}

json响应:

{
    "area" : {
        "data":"100"
    }
}

场景2中的响应是我所期望的。所以我想知道为什么这两种情况下的React不同,正确的方法是什么。

ldioqlga

ldioqlga1#

jackson将自动假定任何getter都是一个属性,除非@jsonignore标记存在。
把@jsonproperty标记也放在变量上,就是告诉jackson也写这个。
另外,setter方法上不需要@jsonproperty标记。
这就是所需要的:

@JsonInclude(Include.NON_EMPTY)    
    class Shape {

        AreaCalculation area;

        @JsonProperty("area")
        public AreaCalculation getArea(){
            return area;
        }

        public AreaCalculation setArea(AreaCalculation area) {
            this.area = area;
        }
    }

我还倾向于使用@jsoninclude属性,如图所示,以防止写入空值和空值。

相关问题