·必答内容:
拦截器的应用场景还是很多的,比如在项目中,我们基于拦载器实现登录校验的功能、参数统一转换处理、数据的脱敏、统一编码处理等功能。在SpringBoot项目拦截器的使用分为两步进行:第一步呢,需要定义一个类实现Handlerlnterceptor接口,然后再实现接口中的方法,比如:preHandlepostHandle、afterCompletion.
第二步呢,就是需要定义一个配置类,然后实现WebMvcConfigure,然后在这个配置类中配置拦截器,指定拦载器的拦载路径、排除哪些路径等信息
。可能继续追问的问题:
你说的这些个功能,过滤器好像也能干,那拦载器Interceptor 与 过滤器Filter有什么区别?
接口规范不同:过滤器需要实现Filter接口,而拦载器需要实现Handlernterceptor接口
拦载范围不同:过滤器Filter会拦载web服务器中的所有资源,而Interceptor只会拦截Spring环境的资源,主要就是Controller。
实现机制不同:过滤器在实现上是基于函数回调的,拦截器是基于java的反射机制的,属于面向切面编程的-
种运用。
那其实在开发中,很多的功能,我们既可以通过过滤器Filter来实现,也可以通过拦截器Interceptor来实现
SpringMVC怎么处理异常?
SpringMVC的异常处理,就比较简单了,可以直接使用Spring MVC中的全局异常处理器对异常进行统一处理,此时在我们的三层架构中,都不需要处理异常了,如果运行过程中出现异常,最终会被全局异常处理器捕获,然后返回统一的错误信息。
开发一个全局异常处理器需要使用到两个注解:@RestControllerAdvice、@ExceptionHandler@RestControllerAdvice加在全局异常处理器的这个类上,而@ExceptionHandler加在异常处理的方法上,来指定这个方法捕获什么样的异常。
那在定义异常处理方法的时候,可以也定义多个,根据业务的需求,可以针对不同类型的异常,进行不同的处理.
聊聊SpringMVC中的常用注解?
SpringMVC中的注解就比较多了,平时项目开发中比较常用的注解有以下几个:
1、@RequestMapping:用于映射请求路径,可以定义在类上和方法上。用于类上,则表示类中的所有的方法都是以该地址作为父路径。我们也可以基于该注解中的method属性,来限定请求方式,由此也衍生了几个注解,如:@GetMapping、@PostMapping、@PutMapping、@DeleteMapping.
2、@RequestBody:该注解实现接收请求的json数据,将json转换为java对象
3、@RequestParam:指定请求参数的名称,如果请求参数名与方法形参不一致,可以使用此注解映射绑定也可以使用该注解来设置参数的默认值
4、@PathViriable:从请求路径中获取请求参数(/user/{id}),传递给方法的形式参数。
5、@ResponseBody:注解实现将controller方法返回值直接作为请求体响应,如果返回值是对象/集合,会转化为ison对象响应给客户端