摘自 mhtbbx:”Java中的注解 - @NotNull”
比如说,你写了一个后台系统,接收用户的请求,经过运算后返回结果,很通用的一个实现方案。假定所有的方法都需要校验参数是否为空,不然就可能有NullPointerException,如果系统有N个接口,每个接口参数有M个,你需要写N * M个if判断语句。如
1 2 3
| if (StringUtils.isBlank(request.getA())) { throw new IllegalArgumentException("A is blank"); }
|
这么写下来,肯定代码是很丑的。那怎么办呢?记得我们之前说过的编码理念,Don’t repeat yourself,就派上用场了。
简单校验
编写需要校验的bean
1 2 3 4 5 6
| @NotNull(message="名字不能为空") private String userName; @Max(value=120,message="年龄最大不能查过120") private int age; @Email(message="邮箱格式错误") private String email;
|
校验方法
1 2 3 4 5 6 7 8 9 10 11
| @RequestMapping("/login") public String testValid(@Valid User user, BindingResult result){ if (result.hasErrors()){ List<ObjectError> errorList = result.getAllErrors(); for(ObjectError error : errorList){ System.out.println(error.getDefaultMessage()); } } return "test"; }
|
备注:这里一个@Valid的参数后必须紧挨着一个BindingResult 参数,否则spring会在校验不通过时直接抛出异常
级联校验
编写相关的bean
1 2 3 4 5 6 7 8 9 10
| public class ReportVO { @NotNull(message = "举报内容不能为空") @Valid private ReportContent content; @NotNull(message = "举报信息不能为空") @Valid private ReportInfo info; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class ReportInfo extends BaseTenantDomain<String> { private String reportContentId; @NotBlank(message = "举报人id不能为空") private String reportorId; @NotNull(message = "举报类型不能为空") private ReportType reportType; @NotBlank(message = "举报详细描述不能为空") @Size(max=100, message = "举报详细描述不能超过100") private String desc; private Date reportTime; // 举报时间 private Date dealTime; // 处理时间 }
|
校验方法
1 2 3
| public void report(@RequestBody @Valid ReportVO reportVo,BindingResult result) { contentService.report(reportVo.getContent(), reportVo.getInfo()); }
|