「java注解range」Java注解让某个注解失效

博主:adminadmin 2022-11-23 23:19:08 61

本篇文章给大家谈谈java注解range,以及Java注解让某个注解失效对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java中 注解@Range返回的是什么?

范围值

range(10) //0..9 等价于为:[0,1,2,3,4,5,6,7,8,9]

range(5,10) //5..9 等价于为:[5,6,7,8,9]

range(5,20,3) //5..20 step 3 等价于为:[5,8,11,14,17]

java range是哪个包

说的太模糊了,Java的包名一般都是以.为分隔符的。

例如:

java.io

java.lang

java.lang.reflect

java.net

java.nio

在pojo类中添加校验规则,哪个注解可以校验字符串的长度

1. 环境准备

springmvc中我们使用hibernate的校验框架validation(注:和hibernate没有任何关系),使用这个校验框架的话,需要导入jar包如下:

2. 配置校验器

在springmvc.xml配置文件中配置一下校验器,如下:

!-- 配置校验器 --

bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"

!-- 校验器,使用hibernate校验器 --

property name="providerClass" value="org.hibernate.validator.HibernateValidator"/

!-- 指定校验使用的资源文件,在文件中配置校验错误信息,如果不指定则默认使用classpath下面的ValidationMessages.properties文件 --

property name="validationMessageSource" ref="messageSource"/

/bean

!-- 校验错误信息配置文件 --

bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"

!-- 资源文件名 --

property name="basenames"

list

valueclasspath:CustomValidationMessage/value

/list

/property

!-- 资源文件编码格式 --

property name="fileEncodings" value="utf-8"/

!-- 对资源文件内容缓存时间,单位秒 --

property name="cacheSeconds" value="120"/

/bean

配置规则就是bean和property属性,别把class和文件名写错了就行,这里有个配置是资源文件名,这个文件中我们将会配置一些错误信息。配置好了校验器后,需要将校验器注入到处理器适配器中,还是在springmvc.xml文件中,将我们配好的validator注入进去,如下:

这样校验器就配置好了。

3. 在pojo中添加校验

注解

运行时检查

@AssertFalse 被注解的元素必须为false

@AssertTrue 被注解的元素必须为true

@DecimalMax(value) 被注解的元素必须为一个数字,其值必须小于等于指定的最小值

@DecimalMin(Value) 被注解的元素必须为一个数字,其值必须大于等于指定的最小值

@Digits(integer=, fraction=) 被注解的元素必须为一个数字,其值必须在可接受的范围内

@Future 被注解的元素必须是日期,检查给定的日期是否比现在晚

@Max(value) 被注解的元素必须为一个数字,其值必须小于等于指定的最大值(百度上好多传阅复制写错了 最小值)

@Min(value) 被注解的元素必须为一个数字,其值必须大于等于指定的最小值

@NotNull 被注解的元素必须不为null

@Null 被注解的元素必须为null

@Past(java.util.Date/Calendar) 被注解的元素必须过去的日期,检查标注对象中的值表示的日期比当前早

@Pattern(regex=, flag=) 被注解的元素必须符合正则表达式,检查该字符串是否能够在match指定的情况下被regex定义的正则表达式匹配

@Size(min=, max=) 被注解的元素必须在制定的范围(数据类型:String, Collection, Map and arrays)

@Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组, 那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验

@CreditCardNumber 对信用卡号进行一个大致的验证

@Email 被注释的元素必须是电子邮箱地址

@Length(min=, max=) 被注解的对象必须是字符串的大小必须在制定的范围内

@NotBlank 被注解的对象必须为字符串,不能为空,检查时会将空格忽略

@NotEmpty 被注释的对象必须为空(数据:String,Collection,Map,arrays)

@Range(min=, max=) 被注释的元素必须在合适的范围内 (数据:BigDecimal, BigInteger, String, byte, short, int, long and 原始类型的包装类 )

@URL(protocol=, host=, port=, regexp=, flags=) 被注解的对象必须是字符串,检查是否是一个有效的URL,如果提供了protocol,host等,则该URL还需满足提供的条件

hibernate校验框架提供了很多注解校验,我先简单罗列一下:

上面我简单罗列了一些校验的注解,不同的注解的具体使用方法可以参考官方文档或者网上资料,这里我选择两个注解来说明如何使用这个hibernate验证框架。首先在自己的pojo中需要验证的属性上添加相应的验证注解:

我们看到注解中可以指定message,那么这个message中的内容是错误消息配置文件中对应的key,取出来的就是对应的错误消息,所以针对这两个错误消息,我们写一下配置文件:

4. 捕获校验错误信息

上面已经将校验相关的配置都配好了,接下来就需要在controller的方法中捕获校验结果中的错误信息,然后将这些错误信息传到前台去显示。那么controller的方法中该如何去捕获呢?如下:

可以看出,在需要校验的pojo前边添加@Validated,在需要校验的pojo后边添加BindingResult bindingResult来接收校验出错信息。值得注意的是:@Validated和BindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后)。这样就可以顺利接收到错误信息了。关于前台的东西,我就不写了。

5. 分组校验

上面已经能完成springmvc的校验功能了,但是有个问题:刚刚是在pojo中定义了校验规则,但是pojo是被多个controller使用的,现在假如两个不同的controller使用的校验规则是不一样的,简单来说,一个controller不需要去校验生产日期,只要校验一下商品名称即可,另一个controller两个都要校验,这样就没法做了,因为两个controller都使用同一个pojo。

为了解决这个问题,我们可以定义多个校验分组(其实是一个Java接口),分组中定义有哪些规则,每个controller方法使用不同的校验分组即可。看一下下面的例子就明白了:

首先定义一个校验分组:

public interface ValidGroup1 {

//接口中不需要定义任何方法,仅仅是对不同的校验规则进行分组

//此分组只校验商品名称的长度

}

然后我们在刚刚的pojo中,添加这个分组,如下:

再看一下想要校验这个name字段的controller中是如何配置的:

这样该controller就不会去校验生产日期的字段了,通过这种方式可以解决不同的controller校验不同字段的问题。

C++和JAVA语言有的相同点和不同点

Java与C++都是面向对象的语言,都使用了面向对象的思想(封装、继承、多态),由于面向对象由许多非常好的特性(继承、组合等),因此二者有很好的可重用性。

主要不同点:

1、Java为解释性语言,其运行过程为:程序源代码经过Java编译器编译成字节码,然后由JVM解释执行。而C/C++为编译型语言,源代码经过编译和链接后生成可执行的二进制代码,可直接执行。因此Java的执行速度比C/C++慢,但Java能够跨平台执行,C/C++不能。

2、Java是纯面向对象语言,所有代码(包括函数、变量)必须在类中实现,除基本数据类型(包括int、float等)外,所有类型都是类。此外,Java语言中不存在全局变量或者全局函数,而C++兼具面向过程和面向对象编程的特点,可以定义全局变量和全局函数。

3、与C/C++语言相比,Java语言中没有指针的概念,这有效防止了C/C++语言中操作指针可能引起的系统问题,从而使程序变得更加安全。

4、与C++语言相比,Java语言不支持多重继承,但是Java语言引入了接口的概念,可以同时实现多个接口。由于接口也有多态特性,因此Java语言中可以通过实现多个接口来实现与C++语言中多重继承类似的目的。

5、在C++语言中,需要开发人员去管理内存的分配(包括申请和释放),而Java语言提供了垃圾回收器来实现垃圾的自动回收,不需要程序显示地管理内存的分配。在C++语言中,通常会把释放资源的代码放到析构函数中,Java语言中虽然没有析构函数,但却引入了一个finalize()方法,当垃圾回收器要释放无用对象的内存时,会首先调用该对象的finalize()方法,因此,开发人员不需要关心也不需要知道对象所占的内存空间何时被释放。

其他不同点:

1C++语言支持运算符重载;Java不支持运算符重载。

2C++语言支持预处理;Java没有预处理器,虽然不支持与处理功能(包括头文件、宏定义等),但它提供的import机制与C++的预处理器功能类似。

3C++支持默认函数参数;Java不支持默认函数参数。

4C/C++支持goto语句;Java不提供goto语句,但Java中的goto是保留关键字。

5C/C++支持自动强制类型转换,这会导致程序的不安全;Java不支持自动强制类型转换,必须由开发人员显式地进行强制类型转换。

6C/C++中,结构和联合的所有成员均为公有,这往往会导致安全性问题的发生;而Java根本就不包含结构和联合,所有内容都封装在类里面。

----------------------------------------------------------------------------------------------------------------------------------------------------------------

1Java具有平台无关性,即对每种数据类型都分配固定长度的空间,例如int型总是占据32位;而C/C++不然,同一个数据类型在不同平台上会分配不同的字节数。

2Java提供对注释文档的内建支持,所以源码文件也可以包含它们自己的文档。通过一个单独的程序,这些文档可以提取出来,并重新格式化为HTML。

3Java包含了一些标准库,用于完成特定的任务,同时这些库简单易用,能够大大缩短开发周期。例如,Java提供了用于访问数据库的JDBC库,用于实现分布式对象的RMI等标注库。C++则依靠一些非标准的、由其他厂商提供的库。

Java与C++的异同点总结 - CSDN博客  

如何使用java validation api进行参数校验

JAVA中通过Hibernate-Validation进行参数验证

在开发JAVA服务器端代码时,我们会遇到对外部传来的参数合法性进行验证,而hibernate-validator提供了一些常用的参数校验注解,我们可以拿来使用。

1.maven中引入hibernate-validator对应的jar:

dependency

groupIdorg.hibernate/groupId

artifactIdhibernate-validator/artifactId

version4.3.1.Final/version

/dependency

2.在Model中定义要校验的字段(即该字段不能为空,并且最大长度为14):

import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.NotEmpty;

public class PayRequestDto {

/**

* 支付完成时间

**/

@NotEmpty(message="支付完成时间不能空")

@Size(max=14,message="支付完成时间长度不能超过{max}位")

private String payTime;

public String getPayTime() {

return payTime;

}

public void setPayTime(String payTime) {

this.payTime = payTime;

}

}

3.定义Validation工具类:

import java.util.Set;

import javax.validation.ConstraintViolation;

import javax.validation.Validation;

import javax.validation.Validator;

import org.hibernate.validator.HibernateValidator;

import com.atai.framework.lang.AppException;

public class ValidationUtils {

/**

* 使用hibernate的注解来进行验证

*

*/

private static Validator validator = Validation

.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator();

/**

* 功能描述: br

* 〈注解验证参数〉

*

* @param obj

* @see [相关类/方法](可选)

* @since [产品/模块版本](可选)

*/

public static T void validate(T obj) {

SetConstraintViolationT constraintViolations = validator.validate(obj);

// 抛出检验异常

if (constraintViolations.size() 0) {

throw new AppException("0001", String.format("参数校验失败:%s", constraintViolations.iterator().next().getMessage()));

}

}

}

4.在代码中调用工具类进行参数校验:

ValidationUtils.validate(requestDto);

以下是对hibernate-validator中部分注解进行描述:

@AssertTrue 用于boolean字段,该字段只能为true

@AssertFalse 该字段的值只能为false

@CreditCardNumber 对信用卡号进行一个大致的验证

@DecimalMax 只能小于或等于该值

@DecimalMin 只能大于或等于该值

@Digits(integer=,fraction=) 检查是否是一种数字的整数、分数,小数位数的数字

@Email 检查是否是一个有效的email地址

@Future 检查该字段的日期是否是属于将来的日期

@Length(min=,max=) 检查所属的字段的长度是否在min和max之间,只能用于字符串

@Max 该字段的值只能小于或等于该值

@Min 该字段的值只能大于或等于该值

@NotNull 不能为null

@NotBlank 不能为空,检查时会将空格忽略

@NotEmpty 不能为空,这里的空是指空字符串

@Null 检查该字段为空

@Past 检查该字段的日期是在过去

@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式

@Range(min=,max=,message=) 被注释的元素必须在合适的范围内

@Size(min=, max=) 检查该字段的size是否在min和max之间,可以是字符串、数组、集合、Map等

@URL(protocol=,host,port) 检查是否是一个有效的URL,如果提供了protocol,host等,则该URL还需满足提供的条件

@Valid 该注解主要用于字段为一个包含其他对象的集合或map或数组的字段,或该字段直接为一个其他对象的引用,这样在检查当前对象的同时也会检查该字段所引用的对象

关于java注解range和Java注解让某个注解失效的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-23,除非注明,否则均为首码项目网原创文章,转载请注明出处。