Validator使用步骤
+ 实现Validator接口
@Component
public class DataValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return DataForm.class.equals(clazz);
}
@Override
public void validate(Object obj, Errors e) {
if(!(obj instanceof DataForm)) {
return;
}
ValidationUtils.rejectIfEmpty(e, "token", "1000","请求令牌不能为空");
ValidationUtils.rejectIfEmpty(e, "signature", "1000","数据签名不能为空");
ValidationUtils.rejectIfEmpty(e, "serial", "1000","流水号不能为空");
ValidationUtils.rejectIfEmpty(e, "accountNo", "1000","帐号不能为空");
ValidationUtils.rejectIfEmpty(e, "encryptData", "1000","上传数据不能为空");
DataForm dataForm = (DataForm)obj;
String token = dataForm.getToken();
e.reject("1002","token非法");
}
}
+ 在controller层,对实体加上@Valid注解
@RequestMapping(value = "dataUpload", method = {RequestMethod.POST})
@ApiOperation(value = "数据上送", nickname = "efei", notes = "数据上送")
public Result getDataPackageList(@RequestBody @Valid DataForm dataForm){
return service.dateUpload(dataForm);
}
+ 使用统一捕捉异常对参数校验不通过定义统一返回内容
@ControllerAdvice
public class ExceptionHandler {
@org.springframework.web.bind.annotation.ExceptionHandler({MethodArgumentNotValidException.class})
@ResponseBody
@ResponseStatus(HttpStatus.OK)
public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
List<ObjectError> allErrors = ex.getBindingResult().getAllErrors();
System.out.println(JSONObject.toJSONString(allErrors));
StringBuilder builder = new StringBuilder();
final String[] errocde = {"1000"};
String errmsg = "参数错误";
allErrors.stream().findFirst().ifPresent(error -> {
builder.append(error.getDefaultMessage());
if(StringUtils.isNotBlank(error.getCode())){
errocde[0] = error.getCode();
}
});
return BuildResult.buildOutResult(errocde[0],errmsg, builder.toString());
}
}