2017-07-31 21 views
1

我有一个用于形成JSON响应的类TeamResponse。它的参数的屈指可数,而他们中的一个可选配:使用Optional.orElseGet()返回null并设置响应值

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() returns可选)

谢谢。

回答

0

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

将值完全取消取决于您用于创建实际JSON的库。 AFAIK在使用JAXB注释时不可能做到这一点。如果你使用杰克逊,尽管有可能(见this answer)。

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

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