【发布时间】:2020-11-10 19:57:15
【问题描述】:
我有一个使用自定义 POJO 类作为 POST 请求正文的 Spring Boot 服务。当客户端将其中一个字段作为 null 传递时,我希望将该值设置为 0。
@Data
public class CardAnswer {
private Integer answerId = 0; //should always be 0 and never set to null
private String value;
}
由以下控制器使用:
@RequestMapping(value = "/{category}", method = RequestMethod.POST)
public SalesPulseMResponse updateSecurity(@PathVariable(value = SalesedgeConstants.CATEGORY)
@RequestBody CardAnswer requestBody) {
return fooService.updateFieldsByCategory(category, requestBody);
}
Spring boot 将为我处理从 JSON 到 CardAnswer 的数据绑定,但是每当 answerId 作为 null 传递时,我希望它保留 0。有没有合适的方法来做到这一点,或者我必须这样做解析类并自己设置值?目前,如果客户端没有在他们的请求 JSON 中传入这个字段,它将保留默认值,但是,我希望即使对于传入的 null 值也保留该默认值。
【问题讨论】:
-
没有好的现有机制。您可以使请求类实现一个
Initializable接口(或者您希望命名它)并调用request.initialize(),然后用默认值填充空值。这将是手工工作,但至少会是一致的设计。 -
我考虑过使用原始方法,但我不确定它的含义,因为标准做法似乎是使用包装类。
-
带有
null检查的自定义设置器应该可以解决问题,如果您可以忍受拒绝nulls 的非直观设置器(您可能需要使用@JsonProperty让杰克逊选择它了,但我不确定,你必须检查)
标签: java spring spring-boot