Я использую Jackson 2. При чтении из удаленного сервиса я получаю объект JSON, подобный этому:
{
"country":"1",
"complex":{
"link":"...",
"value":"..."
},
"test":""
}
, поэтому я создал соответствующие POJO для этой цели:
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"link",
"value"
})
public class Complex {
@JsonProperty("link")
private String link;
@JsonProperty("value")
private String value;
@JsonProperty("link")
public String getLink() {
return link;
}
@JsonProperty("link")
public void setLink(String link) {
this.link = link;
}
@JsonProperty("value")
public String getValue() {
return value;
}
@JsonProperty("value")
public void setValue(String value) {
this.value = value;
}
}
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"country",
"complex",
"test"
})
public class Resource {
@JsonProperty("country")
private String country;
@JsonProperty("complex")
private Complex complex;
@JsonProperty("test")
private String test;
@JsonProperty("country")
public String getCountry() {
return country;
}
@JsonProperty("country")
public void setCountry(String country) {
this.country = country;
}
@JsonProperty("complex")
public Complex getComplex() {
return complex;
}
@JsonProperty("complex")
public void setComplex(Complex complex) {
this.complex = complex;
}
@JsonProperty("test")
public String getTest() {
return test;
}
@JsonProperty("test")
public void setTest(String test) {
this.test = test;
}
}
чтобы я мог сделать:
Resource res = MAPPER.readValue(response.readEntity(String.class), Resource.class);
Моя проблема в том, что при выполнении запросов POST мне нужно отправить другой объект, то есть:
{
"country":"1",
"complex": "value",
"test":""
}
такгде все "complex"
объекты должны быть просто строками.
Есть идеи о том, как справиться с этой ситуацией?
Я пытался создать класс JsonDeserializer
:
public class ComplexValueDeserializer extends JsonDeserializer<Object> {
@Override
public Object deserialize(final JsonParser parser, final DeserializationContext deserializationContext)
throws IOException, JsonProcessingException {
final JsonToken jsonToken = parser.getCurrentToken();
if (jsonToken == null
|| (jsonToken == JsonToken.START_OBJECT && parser.getValueAsString().equals("{}"))) {
return "";
}
return null;
}
}
и добавьте его в:
@JsonProperty("complex")
@JsonDeserialize(using = ComplexValueDeserializer.class)
private Complex complex;
но я получаю java.lang.IllegalArgumentException: argument type mismatch
ошибку.
Спасибо!