【项目经验】拦截器拦截入参出参
文章目录
- 拦截器拦截入参出参
- 入参
- 出参
拦截器拦截入参出参
入参
@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {logger.info("开始拦截.........");String business = request.getRequestURI();business.replaceAll("cloud-native-container-manage","");//获取返回String result = null;try {//获取集群idString clusterId = request.getHeader("clusterId");if (clusterId == null || clusterId.length() == 0) {ResponseJson responseJson = new ResponseJson();responseJson.setErrorCode(EnumMsg.PARAMS_MISSING.getCode());responseJson.setErrorMsg(EnumMsg.PARAMS_MISSING.getMsg()); // HashMap<String, Object> map = new HashMap<>(); // map.put("message",EnumMsg.PARAMS_MISSING.getMsg()); // map.put("code",EnumMsg.PARAMS_MISSING.getCode());result = JSONObject.toJSONString(responseJson);} else {getRequestBody(request,clusterId);}} catch (Exception e) {logger.info("出现异常",e);ResponseJson responseJson = new ResponseJson();responseJson.setErrorCode(EnumMsg.RESULT_IS_Missing.getCode());responseJson.setErrorMsg(EnumMsg.RESULT_IS_Missing.getMsg()); // HashMap<String, Object> map = new HashMap<>(); // map.put("message",EnumMsg.RESULT_IS_Missing.getMsg()); // map.put("code",EnumMsg.RESULT_IS_Missing.getCode());result = JSONObject.toJSONString(responseJson);}//返回数据 写到前端if (result != null) {response.setHeader("Cache-Control", "no-cache");response.setCharacterEncoding("UTF-8");response.setContentType("text/json;charset=UTF-8");logger.info(business + "返回结果" + result);try {response.getWriter().println(result);response.getWriter().flush();response.getWriter().close();} catch (Exception e) {logger.error("io读写失败" + e);}return false;}return true;}
出参
使用@RestController或者@ResponseBody注解的类或方法,不能再拦截器的postHandle方法获取返回值,因为返回值直接就注入到了流内。
这时需要使用@ControllerAdvice
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType)方法可以指定哪些方法或者类需要进行拦截true为拦截,false为不拦截
package com.awifi.cloudnative.container.manage.provider.k8sClientController.interceptor;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.awifi.cloudnative.container.common.basic.ResponseJson; import org.slf4j.Logger;import java.lang.reflect.Method;import org.slf4j.LoggerFactory; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;/** * @ClassName K8sApiResponseBody * @Description TODO * @Author 张鑫 * @Date 2021/12/31 * @Version 1.0 **/ @ControllerAdvice public class K8sApiResponseBody implements ResponseBodyAdvice<Object> {private static final Logger logger = LoggerFactory.getLogger(K8sApiResponseBody.class);@Overridepublic boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {return returnType.getContainingClass().getPackage().getName().startsWith("com.awifi.cloudnative.container.manage.provider.k8sClientController") &&(returnType.getContainingClass().getAnnotation(RestController.class) != null ||(returnType.getMethod() != null && returnType.getMethod().getAnnotation(ResponseBody.class) != null));}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {logger.info("拦截出参");String s = body.toString();JSONObject parseObject = JSONObject.parseObject(s);if (parseObject != null) {if (parseObject.getString("code") != null) {ResponseJson responseJson = new ResponseJson();responseJson.setErrorCode(parseObject.getString("code"));responseJson.setErrorMsg(parseObject.getString("message"));return JSON.toJSONString(responseJson);}}return body;} }
【项目经验】拦截器拦截入参出参相关推荐
- SpringCloud(8)—— 国寿i动项目经验之(拦截器Interceptors技术)
国寿i动项目经验之(拦截器Interceptors技术): 由于Springcloud框架是对Springmvc 进行的二次封装,可以采用面向切面的方式进行前端请求拦截,具体功能逻辑如下: WebMv ...
- java项目统一打印入参出参等日志
java项目统一打印入参出参等日志 1.背景 2.设计思路 3.核心代码 3.1 自定义注解 3.2 实现BeanFactoryPostProcessor接口 3.3 实现MethodIntercep ...
- aop 获取方法入参出参_ASM字节码编程 | JavaAgent+ASM字节码插桩采集方法名称及入参和出参结果并记录方法耗时...
作者:小傅哥 博客:bugstack.cn ❝ 沉淀.分享.成长,让自己和他人都能有所收获! ❞ 一.前言 在我们实际的业务开发到上线的过程中,中间都会经过测试.那么怎么来保证测试质量呢?比如:提交了 ...
- spring拦截器 拦截和排除接口冲突
以下为springboot案例: 场景: 某个规则下的绝大部分接口路径不需要经过拦截器, 但其中的某几个接口又需要经过拦截器. 例如: "/api/register/**" 模式 ...
- SpringBoot利用Aop打印入参出参日志
SpringBoot利用Aop打印入参出参日志 前言 以前写代码不会用Aop的时候,记录入参出参的日志打印都是在Controller中完成的,每个Controller的方法开始之前先打印个日志,然后方 ...
- axios config里自定义属性,使用拦截器拦截,无法拿到自定义属性问题
axios config里自定义属性,使用拦截器拦截,无法拿到自定义属性问题 最新版本axios限制了键,对键值做了白名单处理. 解决思路: 修改源码中的内容,添加一个键来报错额外属性. 或者:使用老 ...
- 在JSP中常见问题,防止SpringMVC拦截器拦截js等静态资源文件的解决方案
在JSP中常见问题,防止SpringMVC拦截器拦截js等静态资源文件的解决方案 参考文章: (1)在JSP中常见问题,防止SpringMVC拦截器拦截js等静态资源文件的解决方案 (2)https: ...
- mysql存储过程出参和入参_数据库mysql存储中的入参出参理解
在使用语句的时候,不可避免的要考虑参数的问题,而参数又是用来辅助变量的.有些小伙伴看到我们标题中的入参形参不知道是什么意思,其实也不难理解.我们把出参和入参看成输入和输出的意思就可以了.想必这样说大家 ...
- 一个可以不被广告拦截器拦截的弹出窗口
/** * 定义ForceWindow类构造函数 * 无参数 * 无返回值 */ function ForceWindow () { this.r = document.documentEleme ...
最新文章
- C#使用Xamarin开发可移植移动应用(1.入门与Xamarin.Forms页面),附源码
- SpringBoot中使用yml配置文件以及配置类实现文件上传下载路径的修改
- 命令行下django-admin.py参数不起作用的问题解决
- 计算机中位运算的一些性质与技巧
- jquery实现图片懒加载
- 电脑软件:5个实用的Windows软件,大幅度提高你的工作效率!
- python 安装包查询_Linux系统下查找安装包所在目录
- 测试通用串行总线控制器好坏软件,通用串行总线控制器出现叹号是什么情况?怎么解决?...
- 目前还有机会火的6大短视频内容方向
- 东大OJ-1391-Big big Power
- php 扩展加载顺序,关于PHP中extension加载顺序问题的解决方法
- TOT12-2技能培训 第一周
- 阿里 P7 到底该具备什么样的能力?
- 78 python - 打飞机案例(让敌机移动)
- Win10 Chromedriver安装教程
- 无人驾驶汽车激光雷达用胶的三大要求
- 【聆听】泰戈尔诗集(二)
- APC计算机大赛,2019全国职业院校技能大赛计算机网络应用赛项题库C卷 2c.docx
- 关于Spark的部署yarn模式
- 隐藏在发表的宏基因组文章背后故事,如何发掘和学习
热门文章
- C语言—飞机大战小游戏
- 英语六级作文单词、例句总结
- C++高频面试问题总结
- python——pycharm使用入门
- spring batch 通过配置文件的方法读文件
- springboot和springcloud功能详细介绍
- Ctrl+Space冲突解决及输入法精简
- MATLAB中deg2rad和rad2deg函数的使用
- 5G-SUPI-SUPC-IMSI
- picpick尺子像素大小精度不够准确_picpick尺子像素大小精度不够准确_【论文解读】像素级分割里程碑算法——FCN全卷积神经网络......