java 仅显示Sping Boot 验证的默认消息- MethodArgumentNotValidException

um6iljoc  于 2023-02-07  发布在  Java
关注(0)|答案(3)|浏览(134)

我如何从MethodArgumentNotValidException中去除多余的信息,而只保留必需的***“默认消息”***?
我正在试验验证注解- @NotNull、@NotBlank和@NotEmpty
我已经配置了如下自定义错误消息:-

@NotNull(message = "Aaaah !!!! firstname cannot be empty !!!")
private String firtName;

我的异常处理程序是:-

@RestControllerAdvice
public class ControllerAdviceClass {
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public ResponseEntity handleValidationException(MethodArgumentNotValidException ex)
    {
        return new ResponseEntity(ex.getMessage() , HttpStatus.BAD_REQUEST);
    }
}

但我在swagger上看到的例外信息是:-

Validation failed for argument [0] in public cosmosdb.User cosmosdb.CosmosController.postResult(cosmosdb.User): 
[Field error in object 'user' on field 'firstName': rejected value [null]; codes [NotNull.user.firstName,NotNull.firstName,NotNull.java.lang.String,NotNull];
 arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [user.firstName,firstName]; arguments []; default message [firstName]]; 
default message [Aaaah !!!! firstname cannot be empty !!!]]

我只想看到默认消息***[啊!!!名字不能为空!!!]***并删除多余的废话。

dgjrabp2

dgjrabp21#

我也有过类似的经历,把默认消息调整为更有意义的东西。
你必须实现一个javax.validation.MessageInterpolation接口,从那里你可以插入你的默认消息。
我用这个网站作为参考来解决我的问题。https://www.baeldung.com/spring-validation-message-interpolation

n9vozmp4

n9vozmp42#

@Override
protected ResponseEntity<Object> 
handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
        HttpHeaders headers, HttpStatus status, WebRequest request) {
    logError(ex, HttpStatus.BAD_REQUEST);
    Map<String, String> errorMap = new HashMap<>();
    ex.getBindingResult().getFieldErrors().forEach(error -> {
        errorMap.put(error.getField(),error.getDefaultMessage());
    });
    return new ResponseEntity<>(errorMap, HttpStatus.BAD_REQUEST);
}
fnatzsnv

fnatzsnv3#

@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(
        MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
    return new ResponseEntity<Object>(ex.getFieldError().getDefaultMessage(), HttpStatus.BAD_REQUEST);
}

相关问题