gpt4 book ai didi

java - 是否可以为 @Valid 参数异常创建多个自定义验证消息?

转载 作者:行者123 更新时间:2023-12-02 09:23:35 27 4
gpt4 key购买 nike

我想为我的自定义验证注释创建自定义消息。如果此验证失败,则会抛出 MethodArgumentNotValidException。因为我为@RequestBody设置了@Valid。

我创建@ControllerAdvice来处理/覆盖MethodArgumentNotValidException消息。我单独有这个枚举错误类。因此,每个抛出此类异常的错误都会抛出与 Invalid Param

相同的消息

我的问题是是否可以排除我的自定义验证消息并抛出不同的消息?如何让这个@MyCustomAnnotation抛出不同的异常消息?不属于 MethodArgumentNotValidException 消息范围。

我的自定义验证界面

@Documented
@Constraint(validatedBy = myValidator.class)
@Target({FIELD, METHOD, ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface CheckMyCode{
String message() default "{my custom string message}";
Class<?> [] groups() default {};
Class<? extends Payload>[] payload() default {};
}

我的 Controller 建议方法来处理所有 MethodArgumentNotValidException 异常

@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException exception, HttpHeaders headers, HttpStatus status, WebRequest request){
CustomClassError<Object> error = CustomClassError.failure(ErrCode.INVALID_PARAM);
return new ResponseEntity<Object>(error, new HttpHeaders(), HttpStatus.OK);
}

最佳答案

您可以重写 Controller 建议中的handleMethodArgumentNotValid方法(似乎这是您需要的用例):

@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
List<String> details = new ArrayList<>();
for(ObjectError error : ex.getBindingResult().getAllErrors()) {
details.add(error.getDefaultMessage());
}
ErrorResponse error = new ErrorResponse("Validation Failed", details);
return new ResponseEntity(error, HttpStatus.BAD_REQUEST);
}
或者,在您的 Controller 类中,您可以通过抛出自定义异常来处理它,然后在 Controller 建议中单独处理它(不是针对验证异常,而是针对所有其他运行时异常,这种方法更适合处理异常):

@PostMapping("/addValidate")
public String submitForm(@Valid ValidatedData validatedData,
BindingResult result, Model m) {
if(result.hasErrors()) {
List<FieldError> errors = bindingResult.getFieldErrors(); // provided only for your information
for (FieldError error : errors ) {
System.out.println (error.getObjectName() + " - " +error.getDefaultMessage());
}
throw new CustomExceptionClass("Your could assign the field error custom message here");
}
m.addAttribute("message", "Success"
+ validatedData.toString());
return "Home";
}

然后在您的 Controller 建议类中,您可以使用传递给异常的消息,例如:

@ExceptionHandler(Exception.class)
public final ResponseEntity<Object> handleAllExceptions(Exception ex, WebRequest request) {
List<String> details = new ArrayList<>();
details.add(ex.getLocalizedMessage()); //just call the message method to get the message in the exception
ErrorResponse error = new ErrorResponse("Server Error", details); //Custom error response class to return json response
return new ResponseEntity(error, HttpStatus.INTERNAL_SERVER_ERROR);
}

关于java - 是否可以为 @Valid 参数异常创建多个自定义验证消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58496221/

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