JAVA POJO:
<div ng-include src="'addPrice.html'"
ng-controller="addPriceController">
测试代码:
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
我在做什么错了?
PS:
aBCFeexxxx
答案 0 :(得分:1)
龙目岛和杰克逊在名为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
属性与{{1} }属性由字段定义,因此您在JSON文本中获得了两个属性。
Java命名约定是将大写首字母缩略词小写,例如“大型HTML文档”应命名为aBCFee
作为字段,bigHtmlDoc
作为设置器。我建议您重命名字段setBigHtmlDoc
。
abcFee
Jackson对此感到满意:
@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;
}
}
我自己没有Lombok,我认为它会以相同的方式命名getter / setter方法,因此不再存在任何差异。