为了账号安全,请及时绑定邮箱和手机立即绑定

如何处理RequestMapping中的@Valid违规?

如何处理RequestMapping中的@Valid违规?

偶然的你 2021-07-23 18:04:01
我在 Java/Spring 中有以下 Rest 控制器。检查约束的验证。但是,这些在到达我的 'bar' 方法的主体之前就已完成。如何处理违规案件?我可以自定义 400 响应正文吗?@RestController@RequestMapping("foo")public class FooController {    @RequestMapping(value = "bar", method = RequestMethod.POST)    public ResponseEntity<Void> bar(@RequestBody @Valid Foo foo) {        //body part        return ResponseEntity.status(HttpStatus.OK).build();    }}
查看完整描述

2 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

您应该使用 controllerAdvice,这是一个示例(在 kotlin 中):


@ControllerAdvice

open class ExceptionAdvice {


    @ExceptionHandler(MethodArgumentNotValidException::class)

    @ResponseBody

    @ResponseStatus(HttpStatus.BAD_REQUEST)

    open fun methodArgumentNotValidExceptionHandler(request: HttpServletRequest, e: MethodArgumentNotValidException): ErrorDto {


        val errors = HashMap<String, String>()


        for (violation in e.bindingResult.allErrors) {

            if (violation is FieldError) {

                errors.put(violation.field, violation.defaultMessage)

            }

        }


        return ErrorDto(errors)

    }


    @ExceptionHandler(BindException::class)

    @ResponseBody

    @ResponseStatus(HttpStatus.BAD_REQUEST)

    open fun bindExceptionHandler(request: HttpServletRequest, e: BindException): ErrorDto {


        val errors = HashMap<String, String>()


        for (violation in e.bindingResult.allErrors) {

            if (violation is FieldError) {

                errors.put(violation.field, violation.defaultMessage)

            }

        }


        return ErrorDto(errors)

    }

}

它允许处理控制器抛出的异常,包括验证异常。


查看完整回答
反对 回复 2021-07-29
  • 2 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信