Bean 验证 @Positive 指令不适用于 Integer @PathVariable

Posted

技术标签:

【中文标题】Bean 验证 @Positive 指令不适用于 Integer @PathVariable【英文标题】:Bean validation @Positive directive is not working on Integer @PathVariable 【发布时间】:2019-11-07 14:12:00 【问题描述】:

我正在尝试使用@Positive bean 验证注释验证控制器方法(REST Api 资源)整数参数,但没有任何反应。

Java: Java 版本“11.0.2”2019-01-15 LTS Java(TM) SE 运行时环境 18.9(内部版本 11.0.2+9-LTS) Java HotSpot(TM) 64 位服务器 VM 18.9(内部版本 11.0.2+9-LTS,混合模式) 春季启动: 2.1.6.发布

代码:

@RestController
@RequestMapping("/test")
public class TestController 

    @GetMapping("/id")
    public ResponseEntity<?> lista(@Valid @NotNull @Positive @PathVariable("id") Integer id) 
        String msg = "";
        if (id > 0) 
            msg = "id > 0";
         else 
            msg = "id <= 0";
        
        System.out.println(msg);
        return ResponseEntity.ok(msg);
    

@Positive 没有做它应该做的事情。

测试: 要求: 获取 localhost:8080/test/0 回应: 200 OK “id 预期: 400 错误请求 要求: 获取 localhost:8080/test/-1 回应: 200 OK “id 预期:400 错误请求 当我尝试 GET localhost:8080/test/teste 时,我收到了 400 Bad Request,正如预期的那样。

【问题讨论】:

【参考方案1】:

遇到同样的问题,通过申请解决了

@Validated

在我的控制器上。那应该给你的不是 HTTP 400,而是 HTTP 500。

【讨论】:

谢谢,它成功了。为了返回 400,我们在 @ControllerAdvice 异常处理程序中为 ConstraintViolationException 类型的异常添加了一个新方法。

以上是关于Bean 验证 @Positive 指令不适用于 Integer @PathVariable的主要内容,如果未能解决你的问题,请参考以下文章

Bean 验证不适用于 mojarra 2.2.4

Spring MVC 表单验证不适用于嵌套的复杂类型

JSR 303 Bean 验证 - 为啥使用 getter 而不是 setter?

JSR 303 Bean 验证 - 为啥使用 getter 而不是 setter?

相机 API 适用于 Jelly Bean 但不适用于 Kitkat

构造函数注入不适用于@Statless bean中的限定符