记录下在springboot上使用validation作为参数验证的效果。
1.首先需要引入依赖,这里我引入的是2.3.4版本。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.3.4.RELEASE</version>
</dependency>
2.在需要做验证的属性上加上对应的注解,我这里加的是@NotNull,判断该字段不能为Null,这样一来在service中省略了判断逻辑。
@NotNull(message = "cloudTestOrderId不能为空")
private Long cloudTestOrderId;
3.在controller中返回参数验证的错误信息,这里我没找到合并所有属性错误信息的方法,所以逻辑只能是这么写,有点繁琐,知道怎么处理更好的朋友记得留言帮助我哈。
@RequestMapping(value = "queryCloudTestResultInfoData", method = RequestMethod.POST)
@ResponseBody
public AjaxResult queryCloudTestResultInfoData(Page<CloudTestResultInfoStatusDto> page
, @RequestBody @Validated ParamsResultInfoStatusDto params, BindingResult result) {
if (result.hasErrors()) {
StringBuffer errorMessage = new StringBuffer();
List<FieldError> fieldErrors = result.getFieldErrors();
for(FieldError error : fieldErrors) {
errorMessage.append(error.getDefaultMessage() + "|");
}
return new AjaxResult(Status.ERROR.getValue(), errorMessage.toString());
}
IPage<CloudTestResultInfoStatusDto> infoStatusDtoPageResult
= cloudTestOrderService.queryCloudTestResultInfoData(page, params);
return new AjaxResult(Status.SUCCESS.getValue(), infoStatusDtoPageResult);
}
还有就是入参的时候需要在参数接收的类前面要加上@Validated注解,并且后面要跟上BindingResult。
result.getFieldErrors()返回的是所有字段的错误验证信息,只有验证错误才会有。
error.getDefaultMessage()返回的就是属性注解里面的message了。
END...