一、前言搭建springboot项目,我们都是采用的Restful接口,那么问题来了,当前端调用接口或者是其他项目调用时,我们不能单一靠调用方来控制参数的准确性,自己也要对一些非空的值进行判定。
二、方案按照我们以往的做法,都是对request中的参数一个一个进行非空判定。 Model: 1 public class Order { 2 3 4 private Long userID; 5 6 7 private Long addressID; 8 9 private String comment; 10 11 }
Controller:
1 @PostMapping("/createOrders") 2 public String createOrders(@RequestBody Order dto) { 3 if(dto.getUserID==null) 4 return "userID不能为空"; 5 if(dto.getAddressID==null) 6 return "addressID不能为空"; 7 if(dto.getComment==null) 8 return "comment不能为空"; 9 return "sucess"; 10 }
这种做法首先是可取的,能达到我们的要求,但是这样如果model字段过多,判定的就很多,相对维护起来就不是那么方便,其次增加controller层的负担,既然我们来到spring4的时代,就应该适应使用注解的趋势,下面是使用注解后的比变化。 Model: public class Order { @NotNull(message = "用户ID不能为空") private Long userID; @NotNull(message = "收货人地址id不能为空") private Long addressID; @NotBlank(message = "备注不为空") private String comment; }
Controller: @PostMapping("/createOrders") public String createOrders(@RequestBody @Valid Order dto, BindingResult results) { if (results.hasErrors()) return results.getFieldError().getDefaultMessage(); return "success"; }
这样我们就只需要在model字段上加上非空验证和相应提示语就好了。 三、常用的校验注解被注释的元素必须为null 被注释的元素不能为null 被注释的元素必须为true 被注释的元素必须为false (value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 (value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 (value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 (value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 (max,min) 被注释的元素的大小必须在指定的范围内。 (integer,fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内 被注释的元素必须是一个过去的日期 被注释的元素必须是一个将来的日期 (value) 被注释的元素必须符合指定的正则表达式。 被注释的元素必须是电子邮件地址 被注释的字符串的大小必须在指定的范围内 被注释的字符串必须非空 被注释的元素必须在合适的范围内 |
|