如果无法在 rest 模板中反序列化,请更改 return 类型?
Change return type if it can't be deserialized in rest template?
我打电话给restTemplate
:
restTemplate.exchange(uri, HttpMethod.GET, prepareHttpEntity(), MyDeserializedClass.class);
我的反序列化类:
public class MyDeserializedClass {
private final String id;
private final String title;
@JsonCreator
public MyDeserializedClass(@JsonProperty("id") String id,
@JsonProperty("title") String title) {
this.pageId = pageId;
this.title = title;
}
}
当 json 中没有对象时,我得到 MyDeserializedClass
和 null
值。
我尝试用 MyDeserializedClass
注释
@JsonInclude(JsonInclude.Include.NON_NULL)
或 @JsonIgnoreProperties(ignoreUnknown = true)
但运气不好。
在这种情况下有没有办法检索另一个对象(或某种回调)?
您可以尝试自己反序列化对象,即:
ResponseEntity<String> response = restTemplate.exchange(uri, HttpMethod.GET, prepareHttpEntity(), String.class);
try {
MyDeserializedClass myClass = new ObjectMapper().readValue(response.body, MyDeserialized.class);
return ResponseEntity.ok(myClass);
} catch(IOException e) {
//log exception
return ResponseEntity.notFound().build();
}
您可以使用静态函数作为主要函数 @JsonCreator
而不是构造函数
public class MyDeserializedClass {
private final String id;
private final String title;
public MyDeserializedClass () {}
@JsonCreator
public static MyDeserializedClass JsonCreator(@JsonProperty("id") String id, @JsonProperty("title") String title){
if (id == null || title == null) return null;
//or some other code can go here
MyDeserializedClass myclass = new MyDeserializedClass();
myclass.id = id; // or use setters
myclass.title = title;
return myclass;
}
}
这样你可以 return null
或某种 MyDeserializedClass 子类而不是 MyDeserializedClass with null values
我打电话给restTemplate
:
restTemplate.exchange(uri, HttpMethod.GET, prepareHttpEntity(), MyDeserializedClass.class);
我的反序列化类:
public class MyDeserializedClass {
private final String id;
private final String title;
@JsonCreator
public MyDeserializedClass(@JsonProperty("id") String id,
@JsonProperty("title") String title) {
this.pageId = pageId;
this.title = title;
}
}
当 json 中没有对象时,我得到 MyDeserializedClass
和 null
值。
我尝试用 MyDeserializedClass
注释
@JsonInclude(JsonInclude.Include.NON_NULL)
或 @JsonIgnoreProperties(ignoreUnknown = true)
但运气不好。
在这种情况下有没有办法检索另一个对象(或某种回调)?
您可以尝试自己反序列化对象,即:
ResponseEntity<String> response = restTemplate.exchange(uri, HttpMethod.GET, prepareHttpEntity(), String.class);
try {
MyDeserializedClass myClass = new ObjectMapper().readValue(response.body, MyDeserialized.class);
return ResponseEntity.ok(myClass);
} catch(IOException e) {
//log exception
return ResponseEntity.notFound().build();
}
您可以使用静态函数作为主要函数 @JsonCreator
而不是构造函数
public class MyDeserializedClass {
private final String id;
private final String title;
public MyDeserializedClass () {}
@JsonCreator
public static MyDeserializedClass JsonCreator(@JsonProperty("id") String id, @JsonProperty("title") String title){
if (id == null || title == null) return null;
//or some other code can go here
MyDeserializedClass myclass = new MyDeserializedClass();
myclass.id = id; // or use setters
myclass.title = title;
return myclass;
}
}
这样你可以 return null
或某种 MyDeserializedClass 子类而不是 MyDeserializedClass with null values