0%

SpringBoot项目中一般使用hibernate-validator来对请求参数进行校验,但hibernate-validator提供的注解有限,有时候需要根据具体业务扩展自定义注解对参数进行校验。

前言

在实际运用中,hibernate-validator的注解分为校验请求参数及请求体,两个校验的情况在处理上有一些差别,下面分开讲解。

阅读全文 »

synchronized的应用

synchronized关键字最主要有以下3种应用方式:

  • 修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁
  • 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁
  • 修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。
阅读全文 »

前言

在并发编程中,我们主要围绕着以下三个问题:

  • 原子性问题:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。
  • 可见性问题:当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。
  • 有序性问题:程序执行的顺序按照代码的先后顺序执行
阅读全文 »

Servlet包中提供了Filter接口供我们实现自定义过滤器。

自定义拦截器可以参考我之前的文章

与之不同的是,拦截器是Spring框架提供的功能,而Filter过滤器是Servlet提供的。下面是拦截器与过滤器的一些主要区别:

  • Filter由Servlet包提供,只能用于Web应用,不能使用Spring容器资源;拦截器由Spring提供,既能用于Web应用,也能用于Application和Swing应用,能使用Spring容器资源。
  • Filter只能在Servlet的前后起作用;而拦截器能深入到方法前后、异常抛出前后。
阅读全文 »

SpringBoot中提供了HandlerInterceptorAdapter适配器供我们自定义拦截器,可以拦截自定义或所有的请求做相应的处理。

HandlerInterceptorAdapter中共有四个方法:

  • preHandle :在Controller方法被调用前执行
  • postHandle :在Controller方法调用后执行
  • afterCompletion :在整个请求处理完成之后执行
  • afterConcurrentHandlingStarted :用来处理异步请求,当Controller中有异步请求方法的时候会触发该方法。
阅读全文 »

在实际项目开发中,经常需要对前台发来的请求body进行处理,例如参数过滤,参数校验,不合法参数拦截,参数解密等等。Spring中提供了 @ControllerAdvice+RequestBodyAdvice 的解决方案 对请求进行全局统一处理,可以避免在controller层对业务代码入侵。

注意:该方法只对使用了@RequestBody注解的参数生效,本质上是AOP,获取的是在请求头中的属性,如果通过GET请求方式,例如http://localhost:8080/xx?id=1 此种方法,是无法获得id参数的,此处下面将用代码证明。

阅读全文 »