1定义一个在方法上作用的注解

@Retention(RetentionPolicy.RUNTIME) // 表示注解在运行时依然存在

@Target(ElementType.METHOD)

@Documented

public @interface noNull {

public String str() default "";

}

2定义一个拦截类,拦截被注解的方法,并验证注解中指定的方法是否为空

public class NoNullInterceptor extends HandlerInterceptorAdapter{

//在请求处理之前进行调用(Controller方法调用之前

@Override

public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {

//如果不是映射到方法直接通过

if (!(o instanceof HandlerMethod)) {

return true;

}

HandlerMethod handlerMethod = (HandlerMethod) o;

Method method = handlerMethod.getMethod();

if (method.getAnnotation(noNull.class) != null) {

noNull noNullAnnotation=method.getAnnotation(noNull.class);

String Str = noNullAnnotation.str();

//从httpServletRequest获取注解上指定的参数

Object obj = httpServletRequest.getParameter(Str);

if(null != obj){

return true;

}else{

httpServletResponse.getWriter().write(JSON.toJSONString(new Result("false","参数缺失")));

return false;

}

}else{

return true;

}

}

//请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)

@Override

public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

}

//在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)

@Override

public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

}

}

3将上步定义的拦截类加入到拦截链

@Configuration

public class interceptorConfig extends WebMvcConfigurerAdapter{

public void addInterceptors(InterceptorRegistry registry){

registry.addInterceptor(new NoNullInterceptor())

.addPathPatterns("/**");

//非空字段拦截

super.addInterceptors(registry);

}

}

4将注解和需要验证非空的参数在需要做非空check的方法声明

@noNull(str = "userName")

public Result sysLogin (

@RequestParam(value="userName", required=false) String userName,

@RequestParam(value="passWord", required=false) String passWord

) {

return Service.sysLogin(userName, passWord);

}

5实现效果

java接口非空判断,springboot使用注解做接口非空判断相关推荐

  1. java unit test moke_惊了,unittest做接口mock测试竟然这么简单

    在项目研发的时候,一般开发会先提供接口文档,虽然很多接口并没有被实现,但测试可以提前写好Mock,等接口实现时可以快速完成该接口的自动话代码编写,进而提高接口自动化测试效率,那么使用Python如何实 ...

  2. 一、为什么要做接口自动化,怎样做

    目录 为什么要做接口自动化,怎样做 一.为什么要做接口自动化 二.了解一波接口 2.1 什么是接口 2.2 常用接口 2.3 http登录接口文档范例 2.4 获取接口关键信息 三.什么项目适合做接口 ...

  3. 什么是接口?什么是接口测试?什么是接口自动化测试?

    一.为什么要做接口自动化 二.了解一波接口 什么是接口 常用接口 http登录接口文档范例 获取接口关键信息 三.什么项目适合做接口自动化测试 四.接口自动化关键点 五 什么时候可以做接口自动化 六. ...

  4. SpringBoot基于AOP实现自定义非空验证的注解

    为了避免对大量参数进行过多的非空校验,我们可以自定义一个非空验证的注解,因为spring自带的@RequestParam并不能对参数进行非空 准备工作 首先需要创建一个spring boot项目,并引 ...

  5. Java Springboot切面+注解实现数据脱敏

    Java Springboot切面+注解实现数据脱敏 1. 业务概述 2. 设计编码 2.1 脱敏类型枚举 2.2 脱敏注解 2.3 脱敏工具类 2.4 统一拦截器 2.5 统一结果集 2.6 用户实 ...

  6. SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战

    一.前言 在面试中,经常会有一道经典面试题,那就是:怎么防止接口重复提交? 小编也是背过的,好几种方式,但是一直没有实战过,做多了管理系统,发现这个事情真的没有过多的重视. 最近在测试过程中,发现了多 ...

  7. Java | SpringBoot 常用注解详解

    1 概述 IOC 是Spring 最为重要的功能之一,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式. 简言之,注解本身没有 ...

  8. Java接口防刷策略(自定义注解实现)

    前言 本文一定要看完,前部分为逻辑说明及简单实现,文章最后有最终版解决方案(基于lua脚本),因为前部分是防君子不防小人,无法抵挡for循环调用. 目的 短信发送及短信验证码校验接口防刷 一方面防止用 ...

  9. Java运行非Web的Springboot项目(测试类或启动主类两种方法)

    Java运行非Web的Springboot项目(测试类或启动主类两种方法) 前言 一.创建打开一个Springboot项目 二.运行项目 1.Test测试类运行 2.启动主类运行 三.持续运行不停止( ...

  10. java 判断对象的属性是否为空_Java 判断实体对象及所有属性是否为空的操作

    1.判断实体对象是否为空 2.判断对象所有属性是否为空 3.特别注意,实体类中如果有基本数据类型,会影响判断 package com.liuxd.object; import org.apache.c ...

最新文章

  1. 跳出数据计算拯救人工智能之打败机器学习方法详解
  2. java数组写入excel_求将java中数组内容逐条加进excel中的代码
  3. 静态库与动态库(一):概述
  4. 谈谈无头电商 - headless commerce
  5. 数据科学项目(二)之明确问题及确立目标
  6. 引用js_js值和引用
  7. 小白都能看懂的干货!大数据这朵“后浪”,能卷起多大的风浪?
  8. 《springcloud 二》微服务动态网关,网关集群
  9. 我的docker随笔14:MySQL操作实例
  10. PostgreSQL中 AnyElement AnyArray AnynonArray的区别与联系
  11. Iperf官方andriod版iperf3
  12. 基于企业服务总线的主数据管理系统(MDM)集成方案
  13. 【渝粤题库】陕西师范大学165104 组织行为学原理 作业(高起专)
  14. HTML简单的网页设计带超链接,HTML:让网页超链接拥有多姿多彩的下划线(1)-网页设计...
  15. Tomcat中 appBase和docBase配置及默认管理页面
  16. 对比极米Z6X Pro和RS Pro 2,极米H5值得入手吗?极米H5评测来了
  17. 计算机管理任务类别103,win7系统如何查看电脑的历史开关机时间|win7系统怎么查询电脑开机后运行多长时间...
  18. LIO-SAM中的mapOptmization
  19. matlab:数组定义
  20. 微信公众号实现淘宝查券机器人

热门文章

  1. TinyMind 和机器之心收藏
  2. Atitit 数据出入管理法v3 目录 1.1. 边界检查:web边界和sql边界 1 2. 检查条目 1 2.1. 数据种类检查 整数 小数 字符串(带长度,字符白名单校验) 1 2.2. 字符黑
  3. Atitit 分期理论 attilax总结
  4. Atitit 数据库视图与表的wrap与层级查询规范
  5. Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结v2
  6. Atitit,通过pid获取进程文件路径 java php  c#.net版本大总结
  7. atitit.html5 vs 原生 app的区别与选择
  8. paip.执行shell cmd 命令uapi java php python总结
  9. paip.web service技术在 JAVA与.NET中的应用流程方案
  10. CTP:rust封装找不到thostmduserapi_se、thosttraderapi_se问题