springboot validation 参数嵌套

绝地灬酷狼 2023-02-26 04:22 57阅读 0赞

springboot validation 参数嵌套

如果需要对嵌套pojo检验,需要在嵌套参数前加@Valid,使嵌套pojo上的验证注解生效

*************************

示例

*********************

pojo 层

Product

  1. @Data
  2. public class Product {
  3. @NotNull
  4. private Integer prodId;
  5. @NotNull
  6. private String prodName;
  7. @DecimalMin(value = "0.01",message = "价格不能小于0.01")
  8. private BigDecimal price;
  9. @Min(value = 1,message = "数量不能小于1")
  10. private Integer amount;
  11. }

Order

  1. @Data
  2. public class Order {
  3. @NotNull
  4. private String orderId;
  5. @FutureOrPresent
  6. @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd HH:mm:ss")
  7. private LocalDateTime orderTime;
  8. @Valid
  9. @NotNull
  10. private List<Product> productList;
  11. }

productList上加@Valid,使product的验证注解生效

*********************

controller 层

HelloController

  1. @RestController
  2. public class HelloController {
  3. @RequestMapping("/hello")
  4. public String hello(@Validated @RequestBody Order order, BindingResult result){
  5. System.out.println(order);
  6. if (result.hasFieldErrors()){
  7. result.getFieldErrors().forEach(error -> {
  8. System.out.print("field:"+error.getField());
  9. System.out.println(" ==> message:"+error.getDefaultMessage());
  10. });
  11. }
  12. return "success";
  13. }
  14. }

*************************

使用测试

localhost:8080/hello,设置header:Content-Type application/json,设置body:

  1. ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzMTYyNQ_size_16_color_FFFFFF_t_70][]

productList 不加@Valid,控制台输出

  1. 2020-07-14 11:16:44.949 INFO 8972 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
  2. 2020-07-14 11:16:44.956 INFO 8972 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 7 ms
  3. Order(orderId=2, orderTime=2020-09-09T09:08, productList=[Product(prodId=1, prodName=苹果, price=10, amount=1), Product(prodId=2, prodName=香蕉, price=2, amount=0)])

没有对product进行检验,参数注解失效

prductList 加注解,控制台输出

  1. 2020-07-14 11:18:26.195 INFO 17364 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
  2. 2020-07-14 11:18:26.199 INFO 17364 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms
  3. Order(orderId=2, orderTime=2020-09-09T09:08, productList=[Product(prodId=1, prodName=苹果, price=10, amount=1), Product(prodId=2, prodName=香蕉, price=2, amount=0)])
  4. fieldproductList[1].amount ==> message:数量不能小于1

productList[1].amount 报出错误,注解生效

发表评论

表情:
评论列表 (有 0 条评论,57人围观)

还没有评论,来说两句吧...

相关阅读