Conflicting/ambiguous property name definitions while serializing

297 Views Asked by At

I have a class AusgangsrechnungGeneral which has a property "abrechnungsmonat". It is set from JSON via Jackson which has the same property, but defined as "abrechnungsMonat" - which works fine.

Now I need to deserialize the property from

"abrechnungsMonat" -> "abrechnungsmonat"

but serialize it as

"abrechnungsmonat"

Therefore I implemented follwong code:

@JsonFormat(pattern="yyyy-MM")
@JsonDeserialize(using = YearMonthDeserializer.class)
@JsonSetter("abrechnungsMonat")
private YearMonth abrechnungsmonat;

@JsonGetter("abrechnungsmonat")
public YearMonth getAbrechnungsmonat() {
    return this.abrechnungsmonat;
}

For other properties this method works fine, but here I got the following Error:

java.lang.IllegalStateException: Conflicting/ambiguous property name definitions (implicit name 'abrechnungsmonat'): found multiple explicit names: [abrechnungsmonat, abrechnungsMonat], but also implicit accessor: [field com.itf.ghost.propartsyncservice.api.rechnung.propartmodel.AusgangsrechnungGeneral#abrechnungsmonat][visible=true,ignore=false,explicitName=false]

I am using Lombok, but as far as I know Lombok will not generate additional getters if they are already defined. This is the class:

@NoArgsConstructor
@AllArgsConstructor
@Data
@ToString(callSuper = true)
@SuperBuilder
@JsonIgnoreProperties(ignoreUnknown = true)
public class AusgangsrechnungGeneral extends Rechnung {

    @JsonSetter("leistungsZeitraum")
    private String leistungszeitraum;

    @JsonGetter("leistungszeitraum")
    public String getLeistugnszeitraum() {
        return this.leistungszeitraum;
    }

    private String filePath;

    private Boolean isProberechnung;

    @JsonFormat(pattern="yyyy-MM-dd")
    @JsonDeserialize(using = LocalDateDeserializer.class)
    private LocalDate bezahltAm;

    @JsonFormat(pattern="yyyy-MM-dd")
    @JsonDeserialize(using = LocalDateDeserializer.class)
    private LocalDate zahlungErwartetAm;

    @JsonFormat(pattern="yyyy-MM")
    @JsonDeserialize(using = YearMonthDeserializer.class)
    @JsonSetter("abrechnungsMonat")
    private YearMonth abrechnungsmonat;

    @JsonGetter("abrechnungsmonat")
    public YearMonth getAbrechnungsmonat() {
        return this.abrechnungsmonat;
    }

    @JsonSetter("kundenId")
    private Long kunde;

    @JsonGetter("kunde")
    public Long getKunde() {
        return this.kunde;
    }

    @JsonSetter("abls")
    private List<AbrechenbareLeistung> abrechenbareLeistungen;

    @JsonGetter("abrechenbareLeistungen")
    public List<AbrechenbareLeistung> getAbrechenbareLeistungen() {
        return this.abrechenbareLeistungen;
    }
}

1

There are 1 best solutions below

1
On

Solved it with:

@JsonFormat(pattern="yyyy-MM")
@JsonAlias("abrechnungsMonat")
@JsonDeserialize(using = YearMonthDeserializer.class)
@JsonSerialize(using = YearMonthSerializer.class)
private YearMonth abrechnungsmonat;