For simplicity here is a simple class:
class GetterMethodsObject {
    int id = 10;
    public int getId() {
        return id;
    }
    // @JsonIgnore
    public boolean isId() {
        return true;
    }
}
Serializing this object should give:
{"id":10}
as there is public getter method. Usage example:
mapper=new ObjectMapper();
mapper.writeValueAsString(object);
But I am getting exception:
com.fasterxml.jackson.databind.JsonMappingException:
Conflicting getter definitions for property "id": org.citi.facility.GetterMethodsObject#isId(0 params) vs org.citi.facility.GetterMethodsObject#getId(0 params)
As id is Integer so, I am expecting Jackson to call getId() method but not isId(). isId() method should be called only if id is boolean? Even I put @JsonIgnore it is not helping. I can not change actual object. How to fix this issue?
Jackson library checks getter/setters methods for serializing/deserializing. You can omit this annoying bug by below dirty hack. You have to use two annotations:
@JsonIgnore - tell Jackson to ignore this property@JsonProperty("isId") - tell Jackson to use this method name in serialization process. It looks like Jackson found collision because it found two methods and these two methods link to one field - id.Your POJO class should look like below:
class GetterMethodsObject {
    private int id = 10;
    public int getId() {
        return id;
    }
    @JsonIgnore
    @JsonProperty("isId")
    public boolean isId() {
        return true;
    }
}
Another solution: you should rename isId method because it is confusing. You should consider: hasId or even better hasValidId. I do not know what your's isId method is doing but you should give much more information in method name.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With