SpringMVC自定义注解进行日期校验
来源:互联网 发布:永磁旋振治疗仪淘宝 编辑:程序博客网 时间:2024/06/03 16:36
SpringMVC固定注解虽然很方便,但是类似两个日期之间的这种校验做不了,所以可以进行自定义注解的方式进行,下面以一个校验日期为例
第一步:建立POPO
/**
*
*/
package iss.spmvc.self_ann;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
/**
* 作者:南航
*2017年11月27日,下午2:07:27
*/
public class SelfAnnPOJO {
private Integer userId;
@MyDate(message="第1个日期只能在[1990-9-1,1999-8-30]")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date dt1;
@MyDate(minDate="1989-9-2",maxDate="1999-9-3", message="第2个日期只能在[1989-9-2,1999-9-3]")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date dt2;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Date getDt1() {
return dt1;
}
public void setDt1(Date dt1) {
this.dt1 = dt1;
}
public Date getDt2() {
return dt2;
}
public void setDt2(Date dt2) {
this.dt2 = dt2;
}
}
第二步:创建注解类
package iss.spmvc.self_ann;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
/**
*
* 作者:南航
*2017年11月27日,下午1:50:51
@interface,这个类称为:annotation类,即注解类
*/
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=SelfDateAnnValidator.class)
public @interface MyDate {
String minDate() default "1990-9-1"; //设最小日期的缺省值
String maxDate() default "1999-8-30"; //设最大日期的 缺省值
String pattern() default "yyyy-MM-dd";
String message();
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
第三步:注解实现类
/**
*
*/
package iss.spmvc.self_ann;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import qh.Log;
/**
* 作者:南航
*2017年11月27日,下午1:54:06
*/
public class SelfDateAnnValidator implements ConstraintValidator<MyDate,Date>{
private MyDate mydt;
@Override
public void initialize(MyDate mydt) {
this.mydt=mydt; //取得类属性的注解送入
}
/**
* Date dt,是当前动态录入参数
*/
@Override
public boolean isValid(Date dt, ConstraintValidatorContext ctx) {
String pattern=mydt.pattern();
SimpleDateFormat df=new SimpleDateFormat(pattern);
Date minDt;
Date maxDt;
boolean isOK=true;
try {
String msg;
if(dt==null){
isOK=false;
msg=mydt.message()+",当前日期为空";
}
else{
msg=mydt.message()+",当前日期为="+dt.toLocaleString();
String strMinDt=mydt.minDate();
String strMaxDt=mydt.maxDate();
minDt=df.parse(strMinDt);
maxDt=df.parse(strMaxDt);
int check1=dt.compareTo(minDt); //返回3个值之一,1:后者大于前者;-1:后者小于前者;0:两个相同
int check2=dt.compareTo(maxDt);
Log.getLog().info("check1="+check1+",minDt="+minDt.toLocaleString());
Log.getLog().info("check2="+check2+",maxDt="+maxDt.toLocaleString());
if(check1==-1 || check2==1 )
isOK=false;
}
Log.getLog().info("isOK="+isOK);
if(isOK==false) { //isOK为false表明有错误提示输出
ctx.disableDefaultConstraintViolation();
ctx.buildConstraintViolationWithTemplate(msg).addConstraintViolation();
}
} catch (Exception e) {
e.printStackTrace();
}
//返回false时,有录入错误提示输出,否则无
return isOK;
}
}
第四步:测试类
/**
*
*/
package iss.spmvc.self_ann;
import javax.validation.Valid;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import qh.Log;
/**
* 作者:南航
*2017年11月27日,下午2:13:15
*/
@Controller
@RequestMapping("/valid2")
public class TestSelfAnnController {
public TestSelfAnnController() {
Log.getLog().info("TestSelfAnnController?");
}
@RequestMapping("/open.html")
ModelAndView open(){
SelfAnnPOJO pojo=new SelfAnnPOJO();
ModelAndView mv=new ModelAndView("/user/TestValid2", "po", pojo);
return mv;
}
@RequestMapping("/save.html")
String save(@Validated @ModelAttribute("po") SelfAnnPOJO pojo,BindingResult bind){
// String save(@Valid @ModelAttribute("po") SelfAnnPOJO pojo,BindingResult bind){
int ecount=bind.getErrorCount();
Log.getLog().info(
"出错个数="+ecount+
",="+pojo.getUserId()+
",="+pojo.getDt1()+
",="+pojo.getDt2()
);
return "/user/TestValid2";
}
}
- SpringMVC自定义注解进行日期校验
- springmvc校验注解
- SpringMVC自定义日期格式进行参数绑定
- 使用自定义注解进行restful请求参数的校验
- 自定义校验型注解
- 自定义注解校验
- 自定义注解校验器
- springmvc注解开发-validation校验-分组校验
- springmvc注解开发-validation校验
- springMVC注解方式的校验
- SpringMVC进行请求数据校验
- JavaUtils-自定义注解校验格式
- 自定义注解@NeedLogin登录校验
- spring boot 自定义校验注解
- springMvc自定义注解验证
- springmvc自定义日期转换
- 【转载】springMVC表单校验+全注解
- springmvc注解开发-validation校验-商品修改校验
- 数字滤波器设计——1(Matlab、FPAG、Python)
- 【数据结构作业六a】建立一个顺序表,用顺序查找、折半查找的方法对其实施查找
- Java进制概述及进制间的相互转换
- 计算机视觉(ComputerVision, CV)相关领域牛人的网站链接
- 读书笔记 2017年11月28日
- SpringMVC自定义注解进行日期校验
- 面试杂记1
- leetcode--12. Integer to Roman
- IO多路复用之select、poll、epoll详解
- C语言
- Linux如何查看JDK的安装路径
- shell脚本中写sftp
- 数据结构--无序List
- js为假的判断