Простейшим подходом было бы использование JsonNode
:
@Data
public class FullAddress {
private String address;
private JsonNode contactInfo;
}
Или либо Map<String, Object>
:
@Data
public class FullAddress {
private String address;
private Map<String, Object> contactInfo;
}
. Он работает как для сериализации, так и для десериализации.
Однако, если вы хотите сохранить необработанный JSON, вы можете определить собственный десериализатор:
public class RawJsonDeserializer extends JsonDeserializer<String> {
@Override
public String deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
ObjectMapper mapper = (ObjectMapper) jp.getCodec();
JsonNode node = mapper.readTree(jp);
return mapper.writeValueAsString(node);
}
}
И затем использовать его следующим образом:
@Data
public class FullAddress {
private String address;
@JsonDeserialize(using = RawJsonDeserializer.class)
private String contactInfo;
}
Однако для сериализации обратно можно пометить поле contactInfo
с помощью @JsonRawValue
.