自定义注解传入动态参数_springboot使用自定义注解对接口参数校验_weixin_39563420的博客-CSDN博客

目的:

对自定义注解有更好的认识,让参数校验变得更加简洁、灵活、方便。

正文:

首先,在pom文件引入hibernate的校验依赖

2575ec4245b83256077289e8dbe9a1dc.png

1.自定注解:(注意要加@Constraint约束)

@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})

@Retention(RUNTIME)

@Documented

@Constraint(validatedBy = {ValidatorParamEntity.class})

public @interface ValidParamEntity {

boolean required() default true;

String message() default "只能为大小写字母";

}

    • *

@Component

public class ValidatorParamEntity implements ConstraintValidator {

private static Pattern pattern = Pattern.compile("[a-zA-Z]+");

boolean isRequired;

@Override

public void initialize(ValidParamEntity constraintAnnotation) {

isRequired=constraintAnnotation.required();

}

@Override

public boolean isValid(String value, ConstraintValidatorContext context) {

if(isRequired)

{

if(StringUtils.isEmpty(value))

{

return false;

}

Matcher matcher = pattern.matcher(value);

return matcher.matches();

}

return true;

}

}

2.参数引用校验注解

@Data

public class ParamEntity implements Serializable {

@ValidParamEntity

String name;

@NotNull

Integer id;

}

3.接口加参数前加@Valid

@PostMapping("/visit")

public ResultVo visit(@Valid @RequestBody ParamEntity param)

{

return ResultVo.success();

}

4.对绑定异常做统一全局处理

@RestControllerAdvice

public class GloableException {

@ExceptionHandler(value = Exception.class)

public ResultVo exceptionHandler(Exception e) {

e.printStackTrace();

if (e instanceof ValidationException) {

BindException ex = (ValidationException) e;

List errors = ex.getAllErrors();

ObjectError error = errors.get(0);

String msg = error.getDefaultMessage();

return ResultVo.bindError(msg);

}

return ResultVo.error();

}

}

5.测试

2730d65816d98da51255c1f773f78d4b.png


原网址: 访问
创建于: 2021-07-12 13:51:31
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论