Eu estou usando Spring inicialização Jackson dependência e Lombok no meu projeto, e em resposta eu estou recebendo campos duplicados por causa de sublinhado
Esta é a minha classe de modelo:
@Getter
@Setter
@Accessors(chain = true)
@NoArgsConstructor
@ToString
public class TcinDpciMapDTO {
@JsonProperty(value = "tcin")
private String tcin;
@JsonProperty(value = "dpci")
private String dpci;
@JsonProperty(value = "is_primary_tcin_in_dpci_relation")
private boolean is_primaryTcin = true;
}
Se eu estou usando sublinhado no is_primaryTcin
campo eu estou ficando abaixo de resposta com campos duplicados
{
"_primaryTcin": true,
"tcin": "12345",
"dpci": "12345",
"is_primary_tcin_in_dpci_relation": true
}
Se eu remover sublinhado do campo isprimaryTcin
, então eu estou recebendo resposta correta
{
"tcin": "12345",
"dpci": "12345",
"is_primary_tcin_in_dpci_relation": true
}
Isso é por causa de sublinhado? mas sublinhado é o preferido para uso em nomes de variáveis certas?
Isto é o que a sua classe olhar como depois delomboking:
public class TcinDpciMapDTO {
@JsonProperty("tcin")
private String tcin;
@JsonProperty("dpci")
private String dpci;
@JsonProperty("is_primary_tcin_in_dpci_relation")
private boolean is_primaryTcin = true;
public String getTcin() {
return this.tcin;
}
public String getDpci() {
return this.dpci;
}
public boolean is_primaryTcin() {
return this.is_primaryTcin;
}
public TcinDpciMapDTO setTcin(String tcin) {
this.tcin = tcin;
return this;
}
public TcinDpciMapDTO setDpci(String dpci) {
this.dpci = dpci;
return this;
}
public TcinDpciMapDTO set_primaryTcin(boolean is_primaryTcin) {
this.is_primaryTcin = is_primaryTcin;
return this;
}
public TcinDpciMapDTO() {
}
public String toString() {
return "TcinDpciMapDTO(tcin=" + this.getTcin() + ", dpci=" + this.getDpci() + ", is_primaryTcin=" + this.is_primaryTcin() + ")";
}
}
Se o nome da propriedade gerado não for especificado, Jackson gera descascando prefixo is
ou get
do getter se estiver usando getter ou usando Java nome do campo se a serialização de campo sem usar um getter. Por padrão Jackson só usa getters durante a serialização. Porque você põe @JsonProperty
sobre os campos, Jackson usa ambos os campos e getters e verifica se o campo já é serializado por correspondência gerada nome da propriedade (esta última parte é o meu palpite de qualquer maneira) que não reconhece propriedade gerada a partir de campo is_primaryTcin
e propriedade gerada a partir de getter is_primaryTcin()
como o mesmo (um é internamente chamado is_primaryTcin
e outro _primaryTcin
) - aviso de que se você renomear is_primaryTcin
a as_primaryTcin
desaparece problemas.