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的主要内容,如果未能解决你的问题,请参考以下文章
JSR 303 Bean 验证 - 为啥使用 getter 而不是 setter?
JSR 303 Bean 验证 - 为啥使用 getter 而不是 setter?