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

pke*_*key 4 java null spring response optional

我有一个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;
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

alb*_*nil 6

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


Chr*_*hme 0

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

忽略该值完全取决于您用于创建实际 JSON 的库。AFAIK 使用 JAXB 注释时不可能执行此操作。如果您使用杰克逊,这是可能的(请参阅此答案)。

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