接口字段转实体是否为空判断
来源:互联网 发布:java如何utf8转换为gbk 编辑:程序博客网 时间:2024/06/05 17:08
在开发中如果需要和第三方进行接口交互,这时候对接口字段校验就是必不可少的,对方如果少传字段,或是必传字段为空,如果我们不做判断,很可能导致某个流程出错
一般校验无非就是以下这种处理方式
if(requestVo.getName == null || requestVo.getName.equals("")){ // 自定义异常处理 throw new CustomException("必传字段不能为空"); };
当然这种处理方式是没有问题的,但是如果我们的接口中好几十个必传字段呢?如果是20 个字段,每个字段校验最少2行,那就是40行的代码,这就是我们不想要的了
下面来介绍另一种处理方法,使用注解反射的方式来校验字段
1、定义注解,作用在方法
@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface Required { public String value() default ""; }
2、要校验的实体类
public class Student { private String name; private String age; private String gender; @Required public String getName() { return name; } public void setName(String name) { this.name = name; } @Required public String getAge() { return age; } public void setAge(String age) { this.age = age; } @Required public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; }}
3、注解工具类
public class AnnotionUtils { /** * 注解在字段上 */ public static String validateField(Object obj) { StringBuffer message = new StringBuffer(); Class<?> clazz = obj.getClass(); Field[] fields = clazz.getDeclaredFields(); try { for (Field field : fields) { field.setAccessible(true); Object object = field.get(obj); if (field.isAnnotationPresent(Required.class)) { if (object == null || String.valueOf(object).trim().equals("")) { message.append(field.getName() + "不能为空"); } } } } catch (Exception e) { System.out.println("校验失败" + e); } return message.toString(); } /** * 注解在方法上 */ public static String validateMethod(Object obj) { StringBuffer message = new StringBuffer(); Class<?> clazz = obj.getClass(); Method[] methods = clazz.getDeclaredMethods(); try { for (Method method : methods) { if (method.isAnnotationPresent(Required.class)) { method.setAccessible(true); if (method.invoke(obj, new Object[] {}) == null || String.valueOf(method.invoke(obj, new Object[] {})).trim().equals("")) { message.append(splitGetMethod(method.getName()) + "不能为空"); } } } } catch (Exception e) { System.out.println("校验失败" + e); } return message.toString(); } /** * 分割 get 方法获取字段 */ private static String splitGetMethod(String methodName) { if (methodName == null || methodName.equals("")) { return ""; } methodName = methodName.trim(); if (methodName.startsWith("get") && methodName.length() > 3) { return methodName.substring(3); } else { return methodName; } }}
4、测试
public class TMain { public static void main(String[] args) { Student student = new Student(); student.setName("注解测试"); String validateMsg = AnnotionUtils.validateMethod(student); System.out.println(validateMsg); }
5、测试结果
6、总结
不需要使用 if 来判断字符串是否空了,不管字段有多长,一行代码就搞定所有字段的为空校验,代码看起来就舒服多了
示例中我们使用了注解在方法上,当然我们也可以把注解放到字段上,类似下面这样
这样实体类的代码看起来清晰很多,注解在字段上也可以进行校验在 AnnotationUtil 中也做了支持,但推荐使用注解在方法上,在方法上的效率比字段上要高出很多
这只是一个校验的示例,如果用在其他项目里,可能需要进行一定的修改,不过如果大家体会到这种处理思想,相信改起来也费不了多大功夫
阅读全文
0 0
- 接口字段转实体是否为空判断
- 判断字段的值是否为空
- 如何判断该字段是否为空
- MySQL判断字段是否为空
- oracle判断字段内容是否为空
- sql 判断字段是否为空
- mysql判断某字段是否为空
- mysql 判断字段是否为空
- sqlite3 判断字段是否为空
- 判断数据库字段是否为空
- Oracle判断字段是否为空
- dede判断字段是否为空
- mysql text字段判断是否为空
- sql判断字段是否为空
- postgresql 判断字段是否为空
- java Api接口判断传入的对象以及对象字段是否为空
- SQL:判断字段是否为空或空字符串
- 判断一个实体对象是否真的为空
- postgresql创建序列查询序列
- 我是一个码小白啊,编程对我充满了诱惑,我对编程充满了好奇,今天是一个崭新的开始,加油
- JavaScript 的数据类型
- 阿里iconfont图标使用
- 关于服务器/云计算的认识(个人)
- 接口字段转实体是否为空判断
- Jenkins分布式执行测试用例
- linux升级py3,安装pip,svn
- 认识注册表
- Java对象的序列化与反序列化
- C++/CLI 创建WinForm程序
- 网络流24题 圆桌聚餐
- 中继器、集线器、交换机、网桥的比较
- 算法分析与设计丨第四周丨LeetCode(8)——Binary Tree Level Order Traversal(Medium)