控制器上的initBinder不能将空值转换为null

时间:2019-04-15 21:01:24

标签: java spring spring-boot spring-rest

我正在尝试将请求中的空值转换为空值。看来StringTrimmerEditor应该这样做,但我陷入了对请求对象进行的验证。

我正在使用javax.validation.2.0.1.Final来验证请求,并尝试在Controller的StringTimmerEditor中使用initBinder

在控制器中我添加了以下内容:     @InitBinder public void dataBinding(WebDataBinder binder) { binder.registerCustomEditor(String.class, new StringTrimmerEditor(true)); }

我在服务中有这个:     public RealEstateUpdateResponse update(@Valid @RequestBody RealEstateUpdateRequest realEstateRequest) throws ServiceException { return realEstateBusinessObject.update(realEstateRequest); }

这在请求模型中(请注意,我在此属性中没有@NotNull批注):     @Size(min=5, max=200, message="0004") @JsonProperty(value="street") @ApiModelProperty(name="street", example="St. 3700", value="The real estate street address") private String street;

但是当我发送请求正文时:     "street" : "",

然后我得到:     2019-04-15 17:47:34 ERROR ServiceExceptionHandler:49 - Validation failed for argument at index 0 in method: xxx) throws br.com.ph.ume.exception.ServiceException, with 1 error(s): [Field error in object 'xxx' on field 'street': rejected value []; codes [Size.realEstateUpdateRequest.street,Size.street,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [realEstateUpdateRequest.street,street]; arguments []; default message [street],200,5]; default message [0004]]

如果我发送: “ street”:null或根本不在请求正文中发送“ street”,那么验证就可以了

我希望当我发送“ street”:“”时,它将转换为null并通过验证。

0 个答案:

没有答案