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

时间:2017-07-31 07:13:55

标签: java spring null 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;
}

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

谢谢。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

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

完全省略该值取决于您用于创建实际JSON的库。使用JAXB注释时,AFAIK无法执行此操作。如果您使用杰克逊,则可以使用(见this answer)。

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