我在春季启动时使用验证器,但无法捕获任何异常,我的代码就是那样
首先我创建一个带注释的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,我怎样才能让异常出现?
是的,如果我只有param而不是请求者,如何抛出异常?例如 public Result<?> orderDetailSelByAccountId( @NotBlank @Size(min=10,max=32)@PathVariable(value="accountId") String accountId) {
}
答案 0 :(得分:2)
如果您在@Valid
上使用OrderDetailPO
注释,则可以使用一些选项来处理无效请求。
选项1:
您在方法签名中使用BindingResult
,就像在代码中一样。现在你可以使用if (bindingResult.hasErrors())
,如果它是真的,你可以自由地做你想做的任何事情。您可以抛出自己的异常,返回自定义信息或继续使用您的代码。那是你的决定。你不必抓住任何例外。
选项2:
删除方法签名中的BindingResult
。这意味着Spring会自动向客户端返回BadRequest
。它会响应org.springframework.web.bind.MethodArgumentNotValidException"
,其中包含有关无效请求的所有信息。在这种情况下,您不会输入您的方法。与选项1相同,不得捕获任何异常。
答案 1 :(得分:0)
您可以使用:
tf.parse_example()