之前leader交给我一个校验controller入参的任务,最终代码不太符合要求,被废弃,特此把代码记录下来,便于以后整理,提高。
先讲一下怎么用,目前版本只需要在需要校验的controller方法上添加@Validate注解,处理类中会自动识别String和bean,bean类型,需要在对应字段上添加@Require,才会对字段进行非空校验。
废话不多说,先贴代码(先写个初版,待有时间整理一下这篇博客):
配置信息:(以@Validate为切点)
<bean id="validateAdvitor" class="com.zw.web.base.validators.ParamValidateAdvisor"/>
<aop:config proxy-target-class="true">
<aop:aspect ref="validateAdvitor">
<aop:pointcut expression="@annotation(com.zw.web.base.validators.annos.Validate)" id="validateCut"/>
<aop:around method="validate" pointcut-ref="validateCut"/>
</aop:aspect>
</aop:config>
自定义注解:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
*
*自定义校验注解
* @author WJ_wa
* @create 2018/8/21
* @since 1.0.0
*/
@Target({ElementType.PARAMETER,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Validate {
public boolean isValidate() default true;
public boolean isBean() default false;
public boolean isRequest() default false;
}
import org.springframework.beans.factory.annotation.Required;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* bean实体中的〈必须项〉
* @author WJ_wa
* @create 2018/8/21
* @since 1.0.0
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Require {
public boolean isRequired() default true;
}
方法参数类:
import java.lang.annotation.Annotation;
/**
* 〈方法参数类
* @author WJ_wa
* @create 2018/8/21
* @since 1.0.0
*/
public class Param {
/**
* 名字
*/
private String name;
/**
* 类型
*/
private Class<?> type;
/**
* 值
*/
private Object value;
/**
* 注解
*/
private Annotation anno;
public Param() {
super();
}
public Param(String name, Class<?> type, Object value, Annotation anno) {
super();
this.name = name;
this.type = type;
this.value = value;
this.anno =