对后台方法的校验可以放在spring 拦截器中实现
配置文件如下:
<aop:aspectj-autoproxy proxy-target-class="true" />
<!-- 异常通知类 -->
<bean id="exceptionAdvice" class="com.exception.advice.ExceptionAdvice" />
<!-- 异常标识切点 -->
<bean id="exceptionPointcut" class="com.exception.advice.ExceptionPointcut">
<property name="regexpMethodPointcut">
<ref bean="regexpMethodPointcut"/>
</property>
</bean>
<!-- 异常真正执行的切点 -->
<bean id="regexpMethodPointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut">
<property name="patterns">
<list>
<value>com.example.*..*</value>
</list>
</property>
</bean>
<!-- 异常切面 -->
<bean id="exceptionPointcutAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="pointcut">
<ref bean="exceptionPointcut" />
</property>
<property name="advice">
<ref bean="exceptionAdvice" />
</property>
</bean>
切面如下:
public class ExceptionAdvice implements ThrowsAdvice, MethodBeforeAdvice, AfterReturningAdvice
{
@Override
public void before(Method method, Object[] args, Object target)
throws Throwable
{
MethodValidator validator = Validation.byProvider(HibernateValidator.class)
.configure()
.buildValidatorFactory()
.getValidator()
.unwrap(MethodValidator.class);
Set<MethodConstraintViolation<Object>> violations = validator.validateAllParameters(target, method, args, new Class[]{});
if (!violations.isEmpty())
{
new Exception("", "参数校验异常");
}
}.....
切点:
public class ExceptionPointcut extends StaticMethodMatcherPointcut
{
private JdkRegexpMethodPointcut regexpMethodPointcut;
/**
* {@inheritDoc}
*/
@Override
public boolean matches(Method method, Class<?> targetClass)
{
return regexpMethodPointcut.matches(method, targetClass);
}
public JdkRegexpMethodPointcut getRegexpMethodPointcut()
{
return regexpMethodPointcut;
}
public void setRegexpMethodPointcut(JdkRegexpMethodPointcut regexpMethodPointcut)
{
this.regexpMethodPointcut = regexpMethodPointcut;
}
}
接口定义
public interface CarManager
{
public void add(@Valid @NotNull Car car);
@NotNull
public String dele(@NotNull @UTFSize(min = 2, max = 8) String name);
public int age(@Min(10) @Max(12) int age);
}
http://www.open-open.com/doc/view/dd5267f48e8642b2b6e716183de48687