一篇文章教你如何用Java自定义一个参数校验器

网友投稿 408 2022-09-29


一篇文章教你如何用Java自定义一个参数校验器

目录注解 校验器异常处理测试总结

自定义一个唯一字段校验器

注解

@Target({ElementType.FIELD})

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Constraint(validatedBy = {IsUniqueValidator.class}) // 指定自定义的校验器

public @interface IsUnique {

// 提示信息

String message() default "";

// 不加这俩参数 error msg: contains Constraint annotation, but does not contain a groups parameter.

// 必须包含这两个参数

Class>[] groups() default {};

Class extends Payload>[] payload() default {};

// -----

}

校验器

public class IsUniqueValidator implements ConstraintValidator {

@Override

public void initialize(IsUnique constraintAnnotation) {

}

/**

* 通过该方法,对参数进行验证,看是否通过。

* @param value 修饰字段的值。

* @param context 上下文

* @return true:验证通过。 false:验证不通过。

*/

@Override

public boolean isValid(String value, ConstraintValidatorContext context) {

// 模拟数据库判断是否存在改用户名

return !"aaaa".equals(value);

}

}

异常处理

@ControllerAdvice

@ResponseBody

public class ValidatorExceptionHandler {

@ExceptionHandler(value = BindException.class)

public Map exceptionHandler(BindException e) {

List allErrors = e.getAllErrors();

StringBuilder sb = new StringBuilder();

for (ObjectError error : allErrors) {

sb.append(error.getDefaultMessage());

sb.append(", ");

}

String error = sb.toString();

HashMap resp = new HashMap<>();

resp.put("1004", error.substring(0, error.lastIndexOf(",")));

return resp;

}

}

使用, 跟spring提供的用法完全一致

@Data

public class User {

@NotNull(message = "name不为null")

@IsUnique(message = "用户名是唯一的")

private String name;

@NotNull

private String password;

}

@PostMapping

public String hello(@RequestBody @Valid User user) {

return "hello" + user.getName();

}

测试

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:网站漏洞渗透检测过程与修复方案(漏洞扫描和渗透测试报告)
下一篇:怎么修复网站漏洞 骑士cms的漏洞修复方案(如何攻击网站漏洞)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~