1.在接口开发中,我习惯用bean 去接收参数,我也看到有人用map去接收, 但是我觉得字段定义在后台这边控制会好一些。通常增删改查的接口通用一个bean, 参数不一, 我会用自定义注解,去检查curd 分别必传的参数。以下工具类也是从网上找的,然后根据自己的需要做了调整,这样请求为空的参数一次返回给到前端,我觉得是比较实用的。
package cn.com.pagi.iiwpp.est.invest.fundplan.utils;
import cn.com.pagi.iiwpp.est.invest.annotation.addNotNull;
import cn.com.pagi.iiwpp.est.invest.annotation.deleteNotNull;
import cn.com.pagi.iiwpp.est.invest.annotation.queryNotNull;
import cn.com.pagi.iiwpp.est.invest.annotation.updateNotNull;
import cn.com.pagi.iiwpp.est.invest.fundplan.enums.Constants;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
/**
* @Version
* @Author LIUYAO823
* @Date 2019-9-24 9:37
* @Description 实体中的属性 使用NotNull注解,关于几个不能为空的注解使用说明
*/
public class ClassPropertyHandler<T> {
private Field[] fields;
private T t;
private Class clazz;
public ClassPropertyHandler(T t){
this.t = t;
this.fields = t.getClass().getDeclaredFields();
this.clazz = t.getClass();
}
/**获取所有get方法 方法名
* @return
*/
private List<String> getGetMethodName(String type){
List<String> list = new ArrayList<>();
for(Field field : fields){
//自定义注解,标识必填字段
Annotation annotation=null;
if(Constants.TYPE_ADD.equals(type)){
annotation = field.getAnnotation(addNotNull.class);
}
if(Constants.TYPE_QUERYPAGE.equals(type)){
annotation = field.getAnnotation(queryNotNull.class);
}
if(Constants.TYPE_UPDATE.equals(type)){
annotation = field.getAnnotation(updateNotNull.class);
}
if(Constants.TYPE_DELETE.equals(type)){
annotation = field.getAnnotation(deleteNotNull.class);
}
if(26 == field.getModifiers() || annotation == null){
continue;
}
char[] cs = field.getName().toCharArray();
//首字母大写
cs[0] -= 32;
list.add("get" + String.valueOf(cs));
}
return list;
}
/**判断实体类属性值那些必填字段为空
* @return 返回success表示所有值的属性都满足需求 ,其他看返回值
*/
public String hasNullOrEmptyPropertyValue(String type){
StringBuilder result= new StringBuilder();
List<String> list = getGetMethodName(type);
for(String methodName : list){
try {
Method method = clazz.getMethod(methodName);
Object res = method.invoke(t,null);
if(res == null || "".equals(res)){
//把 "get"截掉
String property = methodName.substring(3);
char[] chars = property.toCharArray();
//首字母变小写
chars[0] += 32;
result.append(", "+String.valueOf(chars));
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
if("".equals(result)){
return Constants.TYPE_CHECK_SUCC;
}
return "参数实体"+clazz.getSimpleName() +"中:" + result.substring(2) + "属性值为空或者null";
}
}
package cn.com.pagi.iiwpp.est.invest.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @Version
* @Author LIUYAO823
* @Date 2019-9-26 15:39
* @Description 自定义注解: 新增时不能为空的参数
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface addNotNull {
/**
* 获取参数名
*/
String fileName();
}