gpt4 book ai didi

java - Jackson 返回多个(重复)字段

转载 作者:行者123 更新时间:2023-12-02 09:22:30 24 4
gpt4 key购买 nike

JAVA POJO:

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;

@Getter @Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Test1 {
@JsonProperty("aBCFeexxxx")
private double aBCFee;

}

测试代码:

public static void main(String[] args) throws JsonProcessingException {
Test1 t = new Test1();
t.setABCFee(10l);
System.out.println((new ObjectMapper()).writeValueAsString(t));
}

输出:{"abcfee":10.0,"aBCFeexxxx":10.0}

为什么输出中返回 acbfee ?期望我们只需要返回 aBCFeexxxx

我做错了什么?

PS:

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.6</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.6</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>

最佳答案

Lombok 和 Jackson 对于名为 aBCFee 的属性的 getter 和 setter 的命名约定存在分歧。

我不使用 Lombok,所以我让 Eclipse 为我创建了 getter/setter,我得到了:

@JsonInclude(JsonInclude.Include.NON_NULL)
class Test1 {
@JsonProperty("aBCFeexxxx")
private double aBCFee;

public double getaBCFee() {
return this.aBCFee;
}
public void setaBCFee(double aBCFee) {
this.aBCFee = aBCFee;
}
}

如您所见,setter 方法名为 setaBCFee,而不是 setABCFee。这段代码运行正常。

{"aBCFeexxxx":10.0}

当我重命名这些方法以匹配您的方法时:

public double getABCFee() {
return this.aBCFee;
}
public void setABCFee(double aBCFee) {
this.aBCFee = aBCFee;
}

我得到了你得到的:

{"abcfee":10.0,"aBCFeexxxx":10.0}

正如你所看到的,Jackson 将前 4 个字符小写,而不仅仅是第一个字符,因此就 Jackson 而言,getter/setter 定义的 abcfee 属性与 aBCFee 属性由字段定义,因此您在 JSON 文本中获得两个属性。

Java 命名约定是将大写缩写改为小写,例如“big HTML doc”应命名为 bigHtmlDoc 作为字段,并将 setBigHtmlDoc 命名为 setter。我建议您重命名字段 abcFee

@JsonInclude(JsonInclude.Include.NON_NULL)
class Test1 {
@JsonProperty("aBCFeexxxx")
private double abcFee;

public double getAbcFee() {
return this.abcFee;
}

public void setAbcFee(double abcFee) {
this.abcFee = abcFee;
}
}

jackson 对此很满意:

{"aBCFeexxxx":10.0}

我自己没有 Lombok,我认为它会将 getter/setter 方法命名为相同,因此不再有任何差异。

关于java - Jackson 返回多个(重复)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58588319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com