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

标签 java spring rest validation

我在 Java/Spring 中有以下 Rest Controller 。检查约束的有效性。然而,这些都是在到达我的“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();
    }

}

最佳答案

您应该使用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)
    }
}

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

关于java - 如何处理RequestMapping中的@Valid违规?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51896730/

相关文章:

rest - 如何在 FireMonkey 中使用 REST API?

java - 如何将ArrayList中的值放入特定范围内?

java - 在一个 Spring Boot 容器中运行多个 Web 应用程序

java - 评估主体时出现 JspException

java 日志记录噩梦和 log4j 在 spring + tomcat6 中的行为不符合预期

php - 保护无 session RESTful API 端点

java - 删除端点 url 中的 v1

java - Gson 和 CSV 冲突?

java - 如何在不发送实体完整 json 的情况下更新对象

java - 初始化对象数组并传递值