【问题标题】:Returning null with Optional.orElseGet() and setting response value使用 Optional.orElseGet() 返回 null 并设置响应值
【发布时间】:2017-07-31 07:13:55
【问题描述】:

我有一个 TeamResponse 类,用于形成 JSON 响应。它有一些参数,其中一个是可选的:

public TeamResponse(Team team, List<TeamSkillTemplateResponse> teamSkillTemplateResponses) {
    this.id = team.getId();
    this.name = team.getName();
    this.department = new DepartmentResponse(team.getDepartment());
    this.division = new DivisionResponse(team.getDepartment().getDivision());
    this.valueStream = team.getValueStream().map(ValueStreamResponse::new).orElseGet(null);
    this.skillTemplate =  teamSkillTemplateResponses;
}

关于这个问题,我实际上有两个问题: 1. 如果值不存在,在响应中返回 null 是否合适? 2.以这种方式返回null是否合适? (方法 getTeam() 返回可选)

谢谢。

【问题讨论】:

  • 你不要orElseGet(null);你可能想要orElse(null)orElseGet 接受一个供应商,并且该供应商不应该为空(尽管我认为它允许 return null)。

标签: java spring null response optional


【解决方案1】:
  1. 是的。 json 输出将是字段不存在,或字段为空;它取决于 json 框架配置。从 json 的角度来看,这两种结果都可以。只有在谈到部分更新时,差异才重要。
  2. 不,您应该使用 .orElse(null) 而不是 orElseGet(您传递的是 null 供应商,而不是 null 结果值)。

【讨论】:

    【解决方案2】:

    在我看来,如果没有值,则返回 null 是可以的。我看到的另外两个选项根本不包括 JSON 回复中的缺失值,或者使用一些默认值表示缺少值。

    省略值完全取决于您用于创建实际 JSON 的库。 AFAIK 在使用 JAXB 注释时不可能做到这一点。如果您使用 Jackson,则可以(请参阅 this answer)。

    第二个选项取决于是否有合适的默认值。如果你的值是一个数组,我肯定会选择这个选项。我不会返回 null,而是返回一个空数组,因为这通常可以由客户端处理而无需任何特殊处理。

    【讨论】:

      猜你喜欢
      • 2020-10-14
      • 1970-01-01
      • 2015-05-04
      • 2021-04-03
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多