0219 springmvc-拦截器和响应增强
拦截器
拦截器分同步拦截器和异步拦截器;
HandlerInterceptor
方法和执行时机
可以看DispathcerServlet的原来确定它的三个方法的执行时机;
AsynHandlerInterceptor
看注释,主要用来清理在并发环境加清理ThreadLocal的数据;
ResponseBodyAdvice
对返回值备注了@ResponseBody或者返回ResponseEntity做了一些加工;
会在使用消息转换器转换为json数据之前进行数据转换输出;
package com.springbootpractice.interceptor.config; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.springbootpractice.interceptor.config.interceptor.MyInterceptor; import lombok.SneakyThrows; import org.springframework.context.annotation.Configuration; import org.springframework.core.MethodParameter; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; import java.util.HashMap; import java.util.Map; /** * 说明:配置拦截器和设置统一返回格式 * @author carter * 创建时间: 2020年02月19日 11:03 下午 **/ @Configuration @ControllerAdvice public class WebConfig implements WebMvcConfigurer, ResponseBodyAdvice { @Override public void addInterceptors(InterceptorRegistry registry) { HandlerInterceptor myIntercepter = new MyInterceptor() ; registry.addInterceptor(myIntercepter).addPathPatterns("/**"); } @Override public boolean supports(MethodParameter returnType, Class converterType) { return true; } @SneakyThrows @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { Map<String,Object> map = new HashMap(); map.put("result","true"); map.put("data",body); return new ObjectMapper().writeValueAsString(map); } }
小结
通过本小节,你可以学到:
- 如何配置拦截器,打印每个http接口的耗时;
- 如何设置接口的统一返回格式;
原创不易,转载请注明出处。
no pays,no gains!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架