Попробуйте это.Это должно работать.Я бы сказал, что вам нужно немного изменить модель Java.
@JsonDeserialize(using = NameDeserializer.class)
public class NameWrapper {
private Name name;
public NameWrapper() {
}
public NameWrapper(Name name) {
this.name = name;
}
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
}
Имя класса будет похоже на
public class Name {
private String firstName;
private String lastName;
public Name() {
}
public Name(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
И, наконец, десериализатор
public class NameDeserializer extends JsonDeserializer {
@Override
public NameWrapper deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException
{
ObjectCodec oc = jsonParser.getCodec();
JsonNode node = oc.readTree(jsonParser);
if(node.get("name").get("firstName") == null && node.get("name").textValue().isEmpty())
return null;
else {
String firstName = node.get("name").get("firstName").textValue();
String lastName = node.get("name").get("lastName").textValue();
return new NameWrapper(new Name(firstName, lastName));
}
}
}
Это будет работать соба эти json's
{
"name": {
"firstName": "John",
"lastName": "Doe"
}
}
и
{
"name": ""
}