【问题标题】:Optional for Post request jackson发布请求杰克逊的可选
【发布时间】:2017-07-05 16:45:45
【问题描述】:

我正在用 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);
 }
}

这两个字段是可选的。

这种方法适用于 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;
}

你知道更好的解决方案吗,也许杰克逊的东西可以解决问题?

【问题讨论】:

标签: java json jackson resttemplate


【解决方案1】:

Jackson,您无法区分可选字段和非可选字段。只需在 POJO 中声明任何字段。如果 JSON 结构中不存在某个字段,则 Jackson 不会调用 setter。您可以跟踪是否在 POJO 中使用标志调用了 setter。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 2011-08-25
    相关资源
    最近更新 更多