vvs*_*man 3 validation exception spring-boot
我在 spring boot 中使用了验证器,但无法捕获任何异常,我的代码就是这样
首先我创建一个带注释的bean
@Data
@EqualsAndHashCode(callSuper = false)
public class OrderDetailPO extends BaseEntity<String>{
    private static final long serialVersionUID = 1L;
    @NotNull
    @Size(max=32,message="ordercode is null")
    private String orderCode;
    @NotBlank
    @Size(max=32,message="productMode is null")
    private String productMode;
    @NotBlank
    @Size(max=128,message="hotelType is null")
    private String hotelType;
    @NotBlank
    @Size(max=32,message="goodsId is null")
    private String goodsId;
}
然后我在控制器中使用@validated
public Result<?> createOrderDetail( @RequestBody @Validated  OrderDetailPO orderDetail,BindingResult bindingResult) throws ParseException, UnsupportedEncodingException {
//       if (bindingResult.hasErrors()) {  
//              String errMsg="";
//              for(FieldError err: bindingResult.getFieldErrors()) {  
//                  errMsg += err.getField()+" is " + err.getCode();
//              }  
//              return Result.buildFail(errMsg);
//          }  
然后我使用一个空请求发送到控制器,但没有任何反应......在我看来,我可以看到 bindingResult 中的错误,但是即使我删除了 bindingResult ,我也无法将异常捕获为 MethodArgumentNotValidException ,我该如何让异常出现?
是的,如果我只有参数而不是请求体,如何抛出异常?例如
 public Result<?> orderDetailSelByAccountId( @NotBlank @Size(min=10,max=32)@PathVariable(value="accountId") String accountId) {
}
如果您使用@Valid注释,您OrderDetailPO有一些选项来处理无效请求。
选项1:
您可以BindingResult像在代码中一样在方法签名中使用。现在你可以使用了if (bindingResult.hasErrors()),如果是真的,你可以自由地做任何你想做的事情。您可以抛出自己的异常、返回自定义消息或继续执行您的代码。那是你的决定。而且您不必捕获任何异常。
选项 2:
BindingResult在您的方法签名中删除。这意味着 Spring 会自动将 a 返回BadRequest给客户端。它将使用org.springframework.web.bind.MethodArgumentNotValidException有关无效请求的所有信息进行响应。在这种情况下,您将不会输入您的方法。与选项 1 相同,不必捕获异常。
| 归档时间: | 
 | 
| 查看次数: | 8608 次 | 
| 最近记录: |