springboot的Bean验证

版权声明:本文为博主原创文章,未经博主允许不得转载。你想转载请附加连接哦 https://blog.csdn.net/dmw412724/article/details/89329374

点击返回目录

对于springBoot来说(严格来说,是对于springmvc来说),如果类路径里存在了Bean验证,那么LocalValidatorFactoryBean将会被登记为用于@Vaild 和@Validated验证参数。

也就是说,我们不需要去配置其他的Validator,spring以及为我们配置了LocalValidatorFactoryBean。

但如果你想配置其他的Validator则需要这样做:

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public Validator getValidator(); {
        // ...
    }
}

什么是bean验证?

Spring对于JSR-303和JSR349的说明:https://docs.spring.io/spring/docs/5.2.0.M1/spring-framework-reference/core.html#validation-beanvalidation-overview

beanvalidation的官网:https://beanvalidation.org这里有更多的详情。

 至于如何使用,看下面的示例代码:

import javax.validation.constraints.NotNull;

import org.springframework.validation.annotation.Validated;
@Validated
@RestController
public class ValidController {
	
	@RequestMapping("/v")
	public String v1(@NotNull Integer userid){
		return "验证";
	}
}

如上述代码所示:如果想直接验证参数是否为null。那么需要在前面添加@NotNull注解。但是此时是无效的,你还需要在类上添加@Validated注解。(该注解不是添加到方法上,也不是添加到参数上,而是添加到类上)

如果是多个参数,需要用一个对象来接收呢?

我们先建一个Vo类:如下只有userid和username

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.groups.Default;

public class UserVo {
    @NotNull(message="userid不能为空",groups=First.class)
    @NotNull(message="userid不能为空",groups=Three.class)
    @NotNull(message="userid不能为空",groups=Sencend.class)
    @Min(message="userid不能小于{value}",value=20,groups=Sencend.class)
    private Integer userid;
    
    @NotBlank(message="username不能为空",groups =Sencend.class)
    @NotBlank(message="username不能为空",groups=Default.class)
    private String username;

    
    getter...setter..
}

然后是controller类

    @RequestMapping("/vv")
	public String vv(@Validated(Sencend.class) UserVo vo){
		return "验证验证";
	}

这两个结合起来就是验证userid不能为空,且不能小于20,username不能blank.

你需要怎么验证在于你选择的组也就是方法参数的@Validated的值。

组类实际上需要你自行创建,而且必须是interface,它没有实际意义,只是用来标明组。

如果@Validated没有值,那么就意味着选择了Default组,Default是javax包下本身就有的。如下:

    @RequestMapping("/vv")
	public String vv(@Validated UserVo vo){
		return "验证验证";
	}

验证注解的message值通常用于提取记录,或者返回到前台。

它同样可以插入模板,例如@Min有个叫做“value"的属性,代表着最小值。那么你可以在message里插入{value}。

当无法经过验证时,spring实际上会报错。spring有默认的处理错误机制,它会将错误一股脑弄到页面上并打印栈,如果你想自行处理注解的message值则需要了解如何springboot来处理异常。

猜你喜欢

转载自blog.csdn.net/dmw412724/article/details/89329374
今日推荐