如果无法在 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 中没有对象时,我得到 MyDeserializedClassnull 值。

我尝试用 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