CDI进阶第四步 自定义注解验证


对于复杂的实际应用,系统自带的验证注解是不够的。系统自带验证注解在

Javax.validation.constraints包下。

只有最大值,最小值之类的验证。虽然说内建验证支持正则表达式,但是还是远远不够的。

J2EE的验证技术支持各种验证,有扩展内建验证注解,或者说是扩展已有验证注解(包括你自己定义的验证注解)。

核心知识点就在于这个注解@Constraint

当然一个注解要成为验证注解,除了加上这个注解外,还需要遵守三大规范,其实就是要在注解里定义三大方法:

String message() default "";

2 Class<?>[] groups() default {};

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

理论知识讲完了,就可以直接上代码了。

package cdivalidate;

 

import java.lang.annotation.Documented;

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;

import javax.validation.constraints.Max;

 

@Max(100)

@Constraint(validatedBy = {})

@Documented

@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR,

ElementType.PARAMETER })

@Retention(RetentionPolicy.RUNTIME)

public @interface Age {

String message() default "";

 

Class<?>[] groups() default {};

 

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

 

}

这个自定义的注解是利用了内建的@Max注解。

然后我们自定义的@Age注解就可以随便在CDI Bean里面用了。

package cdivalidate;

 

import javax.enterprise.context.RequestScoped;

 

@RequestScoped

public class AgeBean {

 

private int age;

public void setAge(@Age int age){

this.age = age;

}

public String greeting(){

return "Hello, you are "age +" years old.";

}

}

然后用servlet,进行测试:

package cdivalidate;

 

import java.io.IOException;

 

import javax.inject.Inject;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

@WebServlet("/age.html")

public class AgeServlet extends HttpServlet {

 

private static final long serialVersionUID = 1L;

 

@Inject

private AgeBean bean;

 

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

int num  = Integer.parseInt(req.getParameter("age"));

bean.setAge(num);

resp.getWriter().append(bean.greeting());

}

 

}

运行结果:

 CDI进阶第四步 自定义注解验证_第1张图片

CDI进阶第四步 自定义注解验证_第2张图片

你可能感兴趣的:(bean,技术,CDI,对象,J2EE)