JSR303介绍和使用

JSR303介绍和使用

1.关于JSR

JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。以下是JSR的各个标准

Web Service技术

Java Date与Time API ( JSR 310)

Java API for RESTful Web Services (JAX-RS) 1.1 (JSR 311)

Implementing Enterprise Web Services 1.3 (JSR 109)

Java API for XML-Based Web Services (JAX-WS) 2.2 (JSR 224)

Java Architecture for XML Binding (JAXB) 2.2 (JSR 222)

Web Services Metadata for the Java Platform (JSR 181)

Java API for XML-Based RPC (JAX-RPC) 1.1 (JSR 101)

Java APIs for XML Messaging 1.3 (JSR 67)

Java API for XML Registries (JAXR) 1.0 (JSR 93)

Web应用技术

Java Servlet 3.0 (JSR 315)

JavaServer Faces 2.0 (JSR 314)

JavaServer Pages 2.2/Expression Language 2.2 (JSR 245)

Standard Tag Library for JavaServer Pages (JSTL) 1.2 (JSR 52)

Debugging Support for Other Languages 1.0 (JSR 45)

企业应用技术

Contexts and Dependency Injection for Java (Web Beans 1.0) (JSR 299)

Dependency Injection for Java 1.0 (JSR 330)

Bean Validation 1.0 (JSR 303)

Enterprise JavaBeans 3.1 (includes Interceptors 1.1) (JSR 318)

Java EE Connector Architecture 1.6 (JSR 322)

Java Persistence 2.0 (JSR 317)

Common Annotations for the Java Platform 1.1 (JSR 250)

Java Message Service API 1.1 (JSR 914)

Java Transaction API (JTA) 1.1 (JSR 907)

JavaMail 1.4 (JSR 919)

管理与安全技术

Java Authentication Service Provider Interface for Containers (JSR 196)

Java Authorization Contract for Containers 1.3 (JSR 115)

Java EE Application Deployment 1.2 (JSR 88)

J2EE Management 1.1 (JSR 77)

Java SE中与Java EE有关的规范

JCache API (JSR 107)

Java Memory Model (JSR 133)

Concurrency Utilitie (JSR 166)

Java API for XML Processing (JAXP) 1.3 (JSR 206)

Java Database Connectivity 4.0 (JSR 221)

Java Management Extensions (JMX) 2.0 (JSR 255)

Java Portlet API (JSR 286)

模块化 ( JSR 294)

Swing应用框架 (JSR 296)

JavaBeans Activation Framework (JAF) 1.1 (JSR 925)

Streaming API for XML (StAX) 1.0 (JSR 173)

2.关于 JSR-303

JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。

3.Hibernate对JSR 303其实现

Hibernate Validator 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。下面是Hibernate 对JSR 303的实现。

springboot2.0之后,spring-boot-starter-web依赖自动引入了hibernate-validator

空检查

@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.

Booelan检查

@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false

长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) Validates that the annotated string is between min and max included.

日期检查

@Past 验证 Date 和 Calendar 对象是否在当前时间之前,验证成立的话被注释的元素一定是一个过去的日期
@Future 验证 Date 和 Calendar 对象是否在当前时间之后 ,验证成立的话被注释的元素一定是一个将来的日期
@Pattern 验证 String 对象是否符合正则表达式的规则,被注释的元素符合制定的正则表达式,regexp:正则表达式 flags: 指定 Pattern.Flag 的数组,表示正则表达式的相关选项。

数值检查
建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为”“,Integer为null
@Min 验证 Number 和 String 对象是否大等于指定的值
@Max 验证 Number 和 String 对象是否小等于指定的值
@DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度
@DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度
@Digits 验证 Number 和 String 的构成是否合法
@Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。
@Range(min=, max=) 被指定的元素必须在合适的范围内
@Range(min=10000,max=50000,message=”range.bean.wage”)
@Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证)

Hibernate 附加的 constraint

@CreditCardNumber信用卡验证
@Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。
@ScriptAssert(lang= ,script=, alias=)
@URL(protocol=,host=, port=,regexp=, flags=)

4.代码实现

Hibernate依赖(springboot2.0之后项目web组件已经内置了这个依赖了)

springboot2.0之后,spring-boot-starter-web依赖自动引入了hibernate-validator
在这里插入图片描述

<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.16.Final</version>
</dependency>
(1)给要校验的javaBean上标注校验注解
@ToString
@Getter
@Setter
public class UmsAdminParam {
    //规定长度
    @Length(min = 6, max = 19, message = "用户名长度是6-18位")
    @ApiModelProperty(value = "用户名", required = true)
    private String username;
    @ApiModelProperty(value = "密码", required = true)
    private String password;
    //不能是空的
    @NotEmpty
    @ApiModelProperty(value = "用户头像")
    private String icon;
    @Email(message = "邮箱格式错误")
    @ApiModelProperty(value = "邮箱")
    private String email;
    @NotNull
    @ApiModelProperty(value = "用户昵称")
    private String nickName;
    @ApiModelProperty(value = "备注")
    private String note;
}

(2)告诉spring这个数据需要校验@Valid
(3)感知校验成功/失败
public ResultBean register(@Valid @RequestBody UmsAdminParam user,BindingResult result) {
        //得到所有错误信息计数
        int errorCount = result.getErrorCount();
        //错误数大于0
        if (errorCount>0){
            //得到所有错误
            List<FieldError> fieldErrors = result.getFieldErrors();
            Map map = new HashMap();
            //迭代错误
            fieldErrors.forEach((fieldError)->{
            	//错误信息
                String field = fieldError.getField();
                String message =fieldError.getDefaultMessage(); 
                map.put(field,message);
            });
          	return ResultBean.error(400,"提交参数不合法").put("data",map);
        }else{
			return ResultBean.ok();
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值