使用 Optional.orElseGet() 返回 null 并设置响应值

Returning null with Optional.orElseGet() and setting response value

我有一个 class 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. 如果值不存在,在响应中 return null 是否合适? 2. 这样 return null 合适吗? (方法 getTeam() returns 可选)

谢谢。

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

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

忽略该值完全取决于您用于创建实际 JSON 的库。据我所知,使用 JAXB 注释时无法执行此操作。如果您使用 Jackson,则有可能(参见 this answer)。

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