跳至内容
wiki
用户工具
登录
站点工具
工具
显示页面
修订记录
反向链接
最近更改
媒体管理器
网站地图
登录
最近更改
媒体管理器
网站地图
您的足迹:
分享:技术:validation:hibernate_validator
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
====== hibernate_validator ====== ===== 介绍 ===== hibernate_validator是hibernate提供的参数校验框架,通过在pojo类属性上加限制注解,再通过工具类校验参数,将异常抛出。 ===== maven引入 ===== maven引入:pom.xml <code xml> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>${hibernate-validator.version}</version> </dependency> </code> ===== spring配置文件 ===== spring配置文件,比如:application-context.xml <code xml> <!-- 参数校验AOP begin --> <bean id="validateAop" class="com.gxx.record.core.ValidateAop" /> <aop:config> <aop:aspect id="validateAspect" ref="validateAop"> <aop:pointcut id="target" expression="execution(* com.gxx.record.service..*.*(..))" /> <aop:around method="around" pointcut-ref="target" /> </aop:aspect> </aop:config> <!-- 参数校验AOP end --> </code> ===== 方法注解 ===== 切面扫描方法,方法上有这个注解@Validate,才会去校验每个入参的属性 <code java Validate.java> package com.gxx.record.core; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 校验参数注解 * @author Gxx */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @Inherited public @interface Validate { /** * 是否校验参数 * true才校验 * @return */ boolean isValidate() default false; } </code> ===== 切面类 ===== <code java ValidateAop.java> package com.gxx.record.core; import java.lang.annotation.Annotation; import java.lang.reflect.Method; import org.apache.log4j.Logger; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.reflect.MethodSignature; import com.gxx.record.utils.ValidationUtils; /** * 服务层AOP * @author Gxx */ public class ValidateAop { /** * 日志处理器 */ private final Logger logger = Logger.getLogger(ValidateAop.class); /** * 方法前后操作 * @param pjp * @return * @throws Exception */ public Object around(ProceedingJoinPoint pjp) throws Throwable { /** * 获取切面方法 */ Signature sig = pjp.getSignature(); MethodSignature msig = null; if (!(sig instanceof MethodSignature)) { throw new IllegalArgumentException("该注解只能用于方法"); } msig = (MethodSignature) sig; Object target = pjp.getTarget(); Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); /** * 判断是否加注解@LogMethodTime 和 是否落地 */ boolean isValidateAnnotation = currentMethod.isAnnotationPresent(Validate.class);//是否加注解@Validate /** * 判断是否加注解@Validate */ if(isValidateAnnotation) { Annotation p = currentMethod.getAnnotation(Validate.class); Method m = p.getClass().getDeclaredMethod("isValidate", null); boolean isValidate = (Boolean) m.invoke(p, null); /** * 是否需要校验 */ if(isValidate) { /** * 参数校验 */ Object[] args = pjp.getArgs(); if(null != args && args.length > 0) { for(Object arg : args) { ValidationUtils.validate(arg); } } } } /** * 执行方法 */ return pjp.proceed(); } } </code> ===== 校验工具类 ===== <code java ValidationUtils.java> package com.gxx.record.utils; import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import org.hibernate.validator.HibernateValidator; /** * 校验工具类 * @author Gxx */ public class ValidationUtils { /** * 使用hibernate的注解来进行验证 */ private static Validator validator = Validation.byProvider(HibernateValidator.class) .configure().failFast(true).buildValidatorFactory().getValidator(); /** * 校验 * @param obj */ public static <T> void validate(T obj) { Set<ConstraintViolation<T>> constraintViolations = validator.validate(obj); /** * 抛出检验异常 */ if (constraintViolations.size() > 0) { throw new RuntimeException(String.format("参数校验失败:%s", constraintViolations.iterator().next().getMessage())); } } } </code> ===== 请求入口类 ===== <code java UserController.java> package com.gxx.record.web.user; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.gxx.record.dto.UserDto; import com.gxx.record.service.UserService; /** * <dl> * <dt><b>Title:</b></dt> * <dd> * none * </dd> * <dt><b>Description:用户控制器</b></dt> * <dd> * <p>none * </dd> * </dl> * * @author Administrator * @version 1.0, 2017年12月14日 * @since record * */ @Controller @RequestMapping("/user/") public class UserController { @Autowired private UserService userService; /** * 校验 * @param request * @param userDto * @return */ @RequestMapping(value = "/validate", produces="application/json") public @ResponseBody String validate(HttpServletRequest request, UserDto userDto) { return userService.validate(userDto); } } </code> ===== pojo类 ===== <code java UserDto.java> package com.gxx.record.dto; import javax.validation.constraints.AssertTrue; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import org.hibernate.validator.constraints.Email; import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.URL; /** * <dl> * <dt><b>Title:</b></dt> * <dd> * 用户传输对象 * </dd> * <dt><b>Description:</b></dt> * <dd> * <p>none * </dd> * </dl> * * @author Administrator * @version 1.0, 2017年12月14日 * @since record * */ public class UserDto { @NotNull(message = "昵称不能为空") private String validNick; @NotEmpty(message = "姓名不能为空字符串") private String validName; @AssertTrue(message = "钱必须是真的") private boolean validMoney; @Max(value=10, message = "数字不能大于10") @Min(value=5, message = "数字不能小于5") private int validNumber; @NotEmpty(message = "字符串不能为空字符串")//如果不配置NotEmpty而且为空,则不校验Length @Length(min=5, max=10, message = "字符串长度有误") private String validString; @NotEmpty(message = "email不能为空字符串")//如果不配置NotEmpty而且为空,则不校验Email @Email(message = "email格式有误") private String validEmail; @NotEmpty(message = "url不能为空字符串")//如果不配置NotEmpty而且为空,则不校验URL @URL(message = "url格式有误") private String validUrl; public String getValidName() { return validName; } public void setValidName(String validName) { this.validName = validName; } public boolean isValidMoney() { return validMoney; } public void setValidMoney(boolean validMoney) { this.validMoney = validMoney; } public String getValidEmail() { return validEmail; } public void setValidEmail(String validEmail) { this.validEmail = validEmail; } public String getValidString() { return validString; } public void setValidString(String validString) { this.validString = validString; } public int getValidNumber() { return validNumber; } public void setValidNumber(int validNumber) { this.validNumber = validNumber; } public String getValidUrl() { return validUrl; } public void setValidUrl(String validUrl) { this.validUrl = validUrl; } public String getValidNick() { return validNick; } public void setValidNick(String validNick) { this.validNick = validNick; } } </code> ===== 服务接口 ===== <code java UserService.java> package com.gxx.record.service; import com.gxx.record.dto.UserDto; /** * <dl> * <dt><b>Title:</b></dt> * <dd> * 用户服务接口 * </dd> * <dt><b>Description:</b></dt> * <dd> * <p>none * </dd> * </dl> * * @author Administrator * @version 1.0, 2017年12月14日 * @since record * */ public interface UserService { /** * 校验接口 * @param userDto * @return */ public String validate(UserDto userDto); } </code> ===== 服务实现类 ===== <code java UserServiceImpl.java> package com.gxx.record.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.gxx.record.base.dao.UserMapper; import com.gxx.record.base.vo.User; import com.gxx.record.core.Datasource; import com.gxx.record.core.Validate; import com.gxx.record.dto.UserDto; import com.gxx.record.service.UserService; /** * <dl> * <dt><b>Title:</b></dt> * <dd> * 用户服务实现类 * </dd> * <dt><b>Description:</b></dt> * <dd> * <p>none * </dd> * </dl> * * @author Administrator * @version 1.0, 2017年12月14日 * @since record * */ @Service("userService") public class UserServiceImpl implements UserService { /** * 校验接口 * @param userDto * @return */ @Validate(isValidate = true) public String validate(UserDto userDto) { return "OK"; } } </code>
分享/技术/validation/hibernate_validator.1513247832.txt.gz
· 最后更改: 2017/12/14 18:37 由
gxx
页面工具
显示页面
修订记录
反向链接
回到顶部