有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在处理MethodArgumentNotValidException时如何访问请求对象?

我正在处理请求对象验证失败后抛出的MethodArgumentNotValidException。所有常用的东西都准备好了:@Valid@ControllerAdvice,以及一个扩展的ResponseEntityExceptionHandler,在其中我覆盖了handleMethodArgumentNotValid()

碰巧,我需要访问相同的请求对象,以便形成定制的错误响应。一种方法是在请求到达控制器之前拦截请求,并创建带有所需字段的@RequestScopebean,以防稍后验证失败

有更好的办法吗


共 (2) 个答案

  1. # 1 楼答案

    MethodArgumentNotValidException类中应该有错误字段。您的handleMethodArgumentNotValid函数可能如下所示

    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(value = HttpStatus.BAD_REQUEST)
    @ResponseBody
    public CustomInputErrorResponse handleMethodArgumentNotValid(MethodArgumentNotValidException e) {
        String message = "Invalid inputs";
        ArrayList<String> fieldNames = new ArrayList<String>();
        for (FieldError fieldError : e.getBindingResult().getFieldErrors()) {
            fieldNames.add(fieldError.getField());
        }
        return new CustomInputErrorResponse(message, fieldNames);
    }
    

    考虑到您有一个CustomInputErrorResponse类,它为自定义消息和错误字段名接受两个参数

  2. # 2 楼答案

    多亏了一位同事的建议,我发现MethodArgumentNotValidException中的BindingResult有一个名为^{}的方法,它返回经过验证的对象。从方法签名(Object getTarget())可以看出,返回值需要一个强制转换