dgs-codegen
dgs-codegen copied to clipboard
Fields with capital letters in the beginning are not deserialised by jackson. java
Hello. We have third party schema, where some fields begin with a capital letter. As example:
type Query {
user(id: Int): User
}
type User {
ESIAPassport: String
firstName: String
}
Generated java class for User looks like:
public class User {
private String ESIAPassport;
private String firstName;
public String getESIAPassport() {
return ESIAPassport;
}
public void setESIAPassport(String ESIAPassport) {
this.ESIAPassport = ESIAPassport;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
}
We receive response like:
{
"data": {
"user": {
"firstName": "A",
"ESIAPassport": "1234"
}
}
}
If we try to read user object, then field ESIAPassport will not be deserialised by jackson, because jackson analyses setter name and expects json to contain field esiapassport.
ObjectMapper objectMapper = new ObjectMapper()
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
String response = """
{
"firstName": "A",
"ESIAPassport": "1234"
}
""";
User user = objectMapper.readValue(response, User.class);
assertEquals("A", user.getFirstName()); // ok
assertEquals("1234", user.getESIAPassport()); // fails
I suppose fix would be to add @JsonProperty annotation on getter or both getter and setter - looks like it doesn't matter for jackson.