Search code examples
javaserializationjacksonjavabeansjackson2

Jackson naming convention issue in serialization with uncommon getter method name


New to java and spring boot.

While trying to serialize the following class,

public class ActionItems {

private String APpID; 

public String getAPpID() {
    return APpID;
}

public void setAPpID(String aPpID) {
    APpID = aPpID;
}

// other fields
}

got the json string as

{
"appID": null,     
}

Whilst, cross checking the getter name with decapitilize(), it is matching with the field name.

Introspector.decapitalize("APpID") - gives "APpID"

Is jackson using a different set of rules and methods when generating the property name from the getter method?

PS: I am aware that, variable name should begin with small case. While going through the java beans naming convention spec got this question.

I am using jackson 2.9.3v.

PS: As per the link PropertyNamingStrategy, it should have produced APpID instead of appId right?

Could someone provide some input here?

Thanks.


Solution

  • In Jackson, you can custom PropertyNamingStrategy, and

    In absence of a registered custom strategy, default Java property naming strategy is used, which leaves field names as is, and removes set/get/is prefix from methods (as well as lower-cases initial sequence of capitalized characters).

    Also, you can custom a property name like:

    @JsonProperty("APpID") // produce {"APpID":"s"}
    public String getAPpID() {
        return APpID;
    }