可选邮寄请求杰克逊

时间:2017-07-05 16:45:46

标签: java json jackson resttemplate

我正在java中构建一个rest客户端。我有以下对象模式。

 public class Mode {

 @JsonProperty("Replicated")
 private Optional<Replicated> replicated = Optional.empty();

 @JsonProperty("Global")
 private Optional<Global> global = Optional.empty();

 public Optional<Global> getGlobal() {
    return global;
 }

 public Optional<Replicated> getReplicated() {
    return replicated;
 }

 public void setGlobal(Global global) {
    this.global = Optional.ofNullable(global);
 }

 public void setReplicated(Replicated replicated) {
    this.replicated = Optional.ofNullable(replicated);
 }
}

这2个字段是Optionals。

此方法适用于GET请求。但我的问题发生在POST请求中。实际上我发送的对象如下:

 { Mode : {Replicated : {present : true} ...

所以我的解决方法如下:

@JsonProperty("Global")
public Global getGlobalForPost() {
    if (global.isPresent()) {
        return global.get();
    }
    return null;
}

@JsonProperty("Replicated")
public Replicated getReplicatedForPost() {
    if (replicated.isPresent()) {
        return replicated.get();
    }
    return null;
}

你知道一个更好的解决方案吗?也许杰克逊有什么可以解决的问题?

1 个答案:

答案 0 :(得分:0)

杰克逊你无法区分可选字段和非可选字段。只需声明POJO中的任何字段即可。如果您的JSON结构中没有字段,那么Jackson将不会调用setter。你可以跟踪POJO中带有标志的setter。