Ломбок и Джексон не согласны с соглашением о присвоении имен для получателей и установщиков свойства с именем aBCFee
.
Я не использую Lombok, поэтому я попросил Eclipse создать для меня получатель / установщик, и яполучил:
@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;
}
}
Как видите, метод установки называется 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}
Как вы можете видеть, Джексон в нижнем регистре первые 4 символа, а не только первый, так что в отношении Джексона, свойство abcfee
, определенное getter / setter, отличается от свойства aBCFee
, определенного полем,и, следовательно, вы получаете два свойства в тексте JSON.
Соглашение об именах Java предназначено для прописных сокращений, например, "большой HTML-документ" должен называться bigHtmlDoc
в качестве поля и setBigHtmlDoc
в качестве полясеттер. Я рекомендую вам переименовать ваше поле 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;
}
}
Джексон доволен тем, что:
{"aBCFeexxxx":10.0}
Не имея самого Lombok, я предполагаю, что оно будет называть методы получения / установкито же самое, поэтому больше нет расхождений.