在spring里面有一個注解? @Validated
可以在方法的入參里面這樣寫
//方法
getActivityFlag(@RequestBody @Validated QueryActivityDto queryActivityDto) //參數詳情@NotBlank(message = "userId不能為空")private String userId;@NotNull(message = "storeId不能為空")private String storeId;@NotBlank(message = "festivalId不能為空")private String festivalId;
然后進行報錯攔截即可,攔截方式有多種
1、直接在切面進行攔截
實現如下方法
private static Validator validator = Validation.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator();/*** @param object object* @param groups groups*/ public static void validateObject(Object object, Class<?>... groups) throws ValidationException {Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object, groups);if (constraintViolations.stream().findFirst().isPresent()) {throw new ValidationException(constraintViolations.stream().findFirst().get().getMessage());} }
2、進行自定義異常處理
ExceptionHandler(VvipException.class) public ResultMsg handleException(VvipException e) {// 打印錯誤信息StackTraceElement s = e.getStackTrace()[0];log.error("msg:【{}】,file:【{}】,line:【{}】,method:【{}】", e.getMessage(), s.getFileName(), s.getLineNumber(), s.getMethodName());return ResultMsg.error(e.getErrorCode().getValue(), e.getMessage()); }private static String getParamErrorMsg(BindingResult bind) {String[] str = Objects.requireNonNull(bind.getAllErrors().get(0).getCodes())[1].split("\\.");String message = bind.getAllErrors().get(0).getDefaultMessage();String msg1 = "不能為空";String msg2 = "不能為null";String msg3 = "must not be null";String msg4 = "must not be empty";if (msg1.equals(message)|| msg2.equals(message)|| msg3.equals(message)|| msg4.equals(message)) {message = ArrayUtil.join(ArrayUtil.remove(str, 0), ".") + ":" + message;}return message; }
3、還有一種就是在參數后面加一個 BindingResult對象(不推薦 耦合度太高)
findMemberByUnionid(@RequestBody @Validated QueryMemberByUnionidDto queryMemberDto, BindingResult result) {if(result.hasErrors()){result.getFieldErrors().forEach((item)->{log.error("參數錯誤:{}",item.getDefaultMessage());});}