gpt4 book ai didi

validation - spring boot 验证器成功但没有异常抛出

转载 作者:行者123 更新时间:2023-12-04 13:22:57 25 4
gpt4 key购买 nike

我在 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;
}

然后我在 Controller 中使用@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);
// }

然后我使用一个空请求发送到 Controller ,但是没有任何反应......在我看来,我可以看到 bindingResult 的错误,但是即使我删除了 bindingResult 也无法捕获到 MethodArgumentNotValidException 异常,如何让异常出现?

是的,如果我只有param没有requestbody,如何抛出异常?例如

 public Result<?> orderDetailSelByAccountId( @NotBlank @Size(min=10,max=32)@PathVariable(value="accountId") String accountId) {
}

最佳答案

如果您在 OrderDetailPO 上使用 @Valid 注释,您可以选择一些选项来处理无效请求。

选项 1:

您可以像在代码中那样在方法签名中使用 BindingResult。现在您可以使用 if (bindingResult.hasErrors()) 并且如果它是 true 您可以自由地做任何您想做的事情。您可以抛出自己的异常、返回自定义消息或继续您的代码。那是你的决定。而且您不必捕获任何异常。

选项 2:

删除方法签名中的 BindingResult。这意味着 Spring 会自动返回一个 BadRequest 给客户端。它将以 org.springframework.web.bind.MethodArgumentNotValidException 响应,其中包含有关无效请求的所有信息。在这种情况下,您将不会输入您的方法。与选项 1 相同,必须不捕获任何异常。

关于validation - spring boot 验证器成功但没有异常抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46902952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com