不想每次都去判断必传的参数是否为空,写代码太繁琐了,正好最近用了AOP实现权限控制,依葫芦画瓢,现在用它实现参数的判空,至于AOP的原理之类,自己百度了解一下吧

1. NullDisable注解

  1. @Documented
  2. @Retention(RUNTIME)
  3. @Target({ TYPE, METHOD, PARAMETER })
  4. public @interface NullDisable {
  5.  
  6. }

2. ParamException

  1. public class ParamException extends RuntimeException{
  2.  
  3. private static final long serialVersionUID = -4993447045204262508L;
  4.  
  5. public ParamException(){
  6. super("参数不能为空");
  7. }
  8.  
  9. public ParamException(String message){
  10. super(message);
  11. }
  12. }

3. ValidParameter

  1. import java.lang.reflect.Method;
  2. import java.lang.reflect.Parameter;
  3.  
  4. import org.aspectj.lang.ProceedingJoinPoint;
  5. import org.aspectj.lang.annotation.Around;
  6. import org.aspectj.lang.annotation.Aspect;
  7. import org.aspectj.lang.annotation.Pointcut;
  8. import org.aspectj.lang.reflect.MethodSignature;
  9. import org.springframework.stereotype.Component;
  10.  
  11. import com.test.exception.ParamException;
  12.  
  13. @Aspect
  14. @Component
  15. public class ValidParameter {
  16. //com.test.controller包下所有的类
  17. @Pointcut("execution(* com.test.controller..*.*(..)))")
  18. public void valid() {};
  19.  
  20. @Around("valid()")
  21. public Object check(ProceedingJoinPoint joinPoint) throws Exception{
  22.  
  23. MethodSignature signature = (MethodSignature) joinPoint.getSignature();
  24. Method method = signature.getMethod();
  25. //获得参数类型
  26. final Parameter[] parameters = method.getParameters();
  27. //参数值
  28. final Object[] args = joinPoint.getArgs();
  29. //参数名称
  30. String[] names = signature.getParameterNames();
  31.  
  32. for(int i = 0; i < parameters.length; i++) {
  33. Parameter parameter = parameters[i];
  34. Object annotation = parameter.getAnnotation(NullDisable.class);
  35. //含有不为空的注解的参数
  36. if (null != annotation) {
  37. if (null == args[i]) {
  38. throw new ParamException(String.format("参数:%s,不能为空", names[i]));
  39. }
  40. }
  41.  
  42. }
        return joinPoint.proceed();
  43. }
  44. }

2. controller

  1. @GetMapping("test")
  2. @PermissionSetter
  3. public Object test(
  4. @RequestParam(value = "name") String name,
  5. @NullDisable @RequestParam(value = "date") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime date
  6. ){
  7. return "";
  8. }

postman测试

AOP实现参数的判空问题的更多相关文章

  1. 在Java中如何优雅地判空

    判空灾难 ​ 作为搬砖党的一族们,我们对判空一定再熟悉不过了,不要跟我说你很少进行判空,除非你喜欢NullPointerException. 不过NullPointerException对于很多猿们来 ...

  2. java中对对象进行判空的操作--简洁编码

    java中对对象进行判空的操作 首先来看一下工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的: 另一种是org.springframework.ut ...

  3. 《SpringBoot判空处理》接开@valid的面纱

    一.事有起因 我们在与前端交互的时候,一般会遇到字段格式校验及非空非null的校验,在没有SpringBoot注解的时候, 我们可能会在service进行处理: if(null == name){ t ...

  4. Asp.net webapi 判断请求参数是否为空简易方法 Model Validation 判断请求参数是否为空

    通常情况下,对于那些经常为别人提供数据接口的开发人员来说,对于调用方传递过来的参数都会有验证处理.例如: if (string.IsNullOrEmpty(entity.Name)) { //当姓名为 ...

  5. shell 字符串判空

    2021-09-01 1. 字符串判空主要用到两个参数 -z 判断字符串为空否 -n 判断字符串不为空 2. 实例 #!/bin/bash PID=`date` if [ -z "$PID& ...

  6. String工具类之“四个判空方式”StringUtils.isNotBlank和StringUtils.isEmpty和StringUtils.isBlank和StringUtils.isNotEmpty

    一.判断str字符串都不为空==>StringUtils.isNotBlank(String str); 1 /** 2 * <p>检查一个字符串是否非空("") ...

  7. 使用Jayrock开源组件创建参数可为空的接口

    经过上一篇文章对Jayrock开源组件的分析,我发现了一个问题,就是在写接口的时候,可以设置某个参数为空,可以不需要进行参数的传递,具体写法如下: 图上的test参数就是可空类型,只需标识为int?类 ...

  8. java中判空

    一.概述 java中判等似乎很简单,==用来判断对象引用(内存地址)是否相同,equals用来判断值是否相同.你可以试用String对象轻松区分这一点. 那么在null判等(也就是判空操作)时呢? 可 ...

  9. JSTL: empty 可以减少很多繁冗的判空(转)

    ${empty student.name }Empty是判空为空返回的真不为空返回的是假 ${(empty student.name)? '空' : '非空'} <c:if test=" ...

随机推荐

  1. jquery from使用

    jquery form是一个基于jquery的表单异步提交的插件,通过它能快速简便的提交表单. html <div> <form id="ajaxForm" me ...

  2. css3 animation 中的 steps

    steps Specifies a stepping function, described above, taking two parameters. The first parameter spe ...

  3. Linux系统学习之 一:新手必须掌握的Linux命令1

    2018-10-03 16:04:12 一.常用系统工作命令 1.wget 命令 作用:用于在终端中下载网络文件. 格式:wget [参数] 下载地址 参数及作用: -b : 后台下载模式 -d:显示 ...

  4. Django REST framework - 权限和限制

    目录 Django REST framework 权限和限制 (你能干什么) 设置权限的方法 案例 第一步: 定义一个权限类 第二步: 使用 视图级别 全局级别设置 --- 限制 (你一分钟能干多少次 ...

  5. Git 基础教程 之 搭建Git服务器

    截图自: 廖雪峰老师官方网站 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0 ...

  6. 学习Android

    =========================================today start to learn Android================= 我们学习需要的软件: jd ...

  7. 【Codeforces 1B】Spreadsheets

    [链接] 我是链接,点我呀:) [题意] A~Z分别对应了1~26 AA是27依次类推 让你完成双向的转换 [题解] 转换方法说实话特别恶心>_< int转string 得像数位DP一样一 ...

  8. oracle数据库审计

    Oracle使用大量不同的审计方法来监控使用何种权限,以及访问哪些对象.审计不会防止使用这些权限,但可以提供有用的信息,用于揭示权限的滥用和误用. 下表中总结了Oracle数据库中不同类型的审计. 审 ...

  9. [TS-A1487][2013中国国家集训队第二次作业]分配游戏[二分]

    根据题意,设$3n$次比较中胜了$w$次,负了$l$次,平了$d$次,所有场次中胜了$W$次,负了$L$次,平了$D$次.如果一场赢了,那么$w-l$就会$+1$,相同地,$W-L$也会$+1$:如果 ...

  10. 本地数据文件加载到hive表

    1.在test数据库下创建表格 hive> create table vod_record_all( > watch_time date, > device_id string, & ...