Spring boot进行参数校验的方法实例详解

网友投稿 197 2023-02-06


Spring boot进行参数校验的方法实例详解

Spring boot开发web项目有时候我们需要对controller层传过来的参数进行一些基本的校验,比如非空、整数值的范围、字符串的长度、日期、邮箱等等。Spring支持jsR-303 Bean Validation API,可以方便的进行校验。

使用注解进行校验

先定义一个form的封装对象

class RequestForm {

@Size(min = 1, max = 5)

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

其中name这个字段用Size注解限制长度1到5。Size是javax.validation包中的constraint注解。

在使用时用@Valid注解表示要校验这个bean。

@ResponseBody

@GetMapping(value = "bean")

public String validate(@Valid RequestForm request) {

System.out.println(request.getName());

return "OK";

}

自定义注解

如果内置的注解不够用,可以自定义注解。

比如先定义一个注解NameConstraint,限制name字段只能从特定数据中选取。

@Target({ ElementType.FIELD, ElementType.PARAMETER })

@Retention(RetentionPolicy.RUNTIME)

@Constraint(validatedBy = NameConstraintValidator.class)

@interface NameConstraint {

String[] allowedValues();

Class>[] groups() default {};

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

Strhttp://ing message();

}

其中allowedValues表示合法的取值范围,message是校验失败的显示信息。

message、groups、payload是hibernate validator要求的字段,想了解的请看官方文档

再定义一个validator做真正的校验

class NameConstraintValidator implements ConstraintValidator {

private String[] validValues;

@Override

public void initialize(NameConstraint constraintAnnotation) {

validValues = constraintAnnotation.allowedValues();

}

@Override

public boolean isValid(String value, ConstraintValidatorContext context) {

for (String s : this.validValues) {

if (s.equals(value)) {

return true;

}

}

return false;

}

}

在form bean中按如下方式使用

class RequestFormWithCustomConstraint {

@NameConstraint(allowedValues = { "bar", "foo" }, message = "只允许bar,foo")

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

直接校验参数

只有一个name字段,不想封装一个对象怎么办?可以直接校验该参数

@Controller

@Validated

@RequestMapping(value = "validator")

public class ParameterValidatorDemoController {

@ResponseBody

@GetMapping(value = "simple")

public String validateParameter(@Size(min = 1, max = 5) Strinhttp://g name) {

System.out.println(name);

return "OK";

}

}

controller上面的@Validated注解则告诉spring需要扫描这个类,来检查其中的constraint注解。

详细信息可以参考官方文http://档有关章节

https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#boot-features-validation

https://docs.spring.io/spring/docs/4.3.16.RELEASE/spring-framework-reference/htmlsingle/#validation-beanvalidation

代码在github

https://github.com/kabike/spring-boot-demo

总结

以上所述是给大家介绍的Spring boot进行参数校验的方法实例详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,会及时回复大家的!


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

上一篇:一篇文章带你玩转Spring bean的终极利器
下一篇:电视盒连接共享文件夹(电视盒子访问电脑共享文件夹)
相关文章

 发表评论

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