文章目录

  • 拦截器拦截入参出参
    • 入参
    • 出参

拦截器拦截入参出参


入参

 @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;}
}

【项目经验】拦截器拦截入参出参相关推荐

  1. SpringCloud(8)—— 国寿i动项目经验之(拦截器Interceptors技术)

    国寿i动项目经验之(拦截器Interceptors技术): 由于Springcloud框架是对Springmvc 进行的二次封装,可以采用面向切面的方式进行前端请求拦截,具体功能逻辑如下: WebMv ...

  2. java项目统一打印入参出参等日志

    java项目统一打印入参出参等日志 1.背景 2.设计思路 3.核心代码 3.1 自定义注解 3.2 实现BeanFactoryPostProcessor接口 3.3 实现MethodIntercep ...

  3. aop 获取方法入参出参_ASM字节码编程 | JavaAgent+ASM字节码插桩采集方法名称及入参和出参结果并记录方法耗时...

    作者:小傅哥 博客:bugstack.cn ❝ 沉淀.分享.成长,让自己和他人都能有所收获! ❞ 一.前言 在我们实际的业务开发到上线的过程中,中间都会经过测试.那么怎么来保证测试质量呢?比如:提交了 ...

  4. spring拦截器 拦截和排除接口冲突

    以下为springboot案例: 场景:  某个规则下的绝大部分接口路径不需要经过拦截器, 但其中的某几个接口又需要经过拦截器. 例如: "/api/register/**" 模式 ...

  5. SpringBoot利用Aop打印入参出参日志

    SpringBoot利用Aop打印入参出参日志 前言 以前写代码不会用Aop的时候,记录入参出参的日志打印都是在Controller中完成的,每个Controller的方法开始之前先打印个日志,然后方 ...

  6. axios config里自定义属性,使用拦截器拦截,无法拿到自定义属性问题

    axios config里自定义属性,使用拦截器拦截,无法拿到自定义属性问题 最新版本axios限制了键,对键值做了白名单处理. 解决思路: 修改源码中的内容,添加一个键来报错额外属性. 或者:使用老 ...

  7. 在JSP中常见问题,防止SpringMVC拦截器拦截js等静态资源文件的解决方案

    在JSP中常见问题,防止SpringMVC拦截器拦截js等静态资源文件的解决方案 参考文章: (1)在JSP中常见问题,防止SpringMVC拦截器拦截js等静态资源文件的解决方案 (2)https: ...

  8. mysql存储过程出参和入参_数据库mysql存储中的入参出参理解

    在使用语句的时候,不可避免的要考虑参数的问题,而参数又是用来辅助变量的.有些小伙伴看到我们标题中的入参形参不知道是什么意思,其实也不难理解.我们把出参和入参看成输入和输出的意思就可以了.想必这样说大家 ...

  9. 一个可以不被广告拦截器拦截的弹出窗口

    /** * 定义ForceWindow类构造函数 * 无参数 * 无返回值 */ function ForceWindow () {   this.r = document.documentEleme ...

最新文章

  1. C#使用Xamarin开发可移植移动应用(1.入门与Xamarin.Forms页面),附源码
  2. SpringBoot中使用yml配置文件以及配置类实现文件上传下载路径的修改
  3. 命令行下django-admin.py参数不起作用的问题解决
  4. 计算机中位运算的一些性质与技巧
  5. jquery实现图片懒加载
  6. 电脑软件:5个实用的Windows软件,大幅度提高你的工作效率!
  7. python 安装包查询_Linux系统下查找安装包所在目录
  8. 测试通用串行总线控制器好坏软件,通用串行总线控制器出现叹号是什么情况?怎么解决?...
  9. 目前还有机会火的6大短视频内容方向
  10. 东大OJ-1391-Big big Power
  11. php 扩展加载顺序,关于PHP中extension加载顺序问题的解决方法
  12. TOT12-2技能培训 第一周
  13. 阿里 P7 到底该具备什么样的能力?
  14. 78 python - 打飞机案例(让敌机移动)
  15. Win10 Chromedriver安装教程
  16. 无人驾驶汽车激光雷达用胶的三大要求
  17. 【聆听】泰戈尔诗集(二)
  18. APC计算机大赛,2019全国职业院校技能大赛计算机网络应用赛项题库C卷 2c.docx
  19. 关于Spark的部署yarn模式
  20. 隐藏在发表的宏基因组文章背后故事,如何发掘和学习

热门文章

  1. C语言—飞机大战小游戏
  2. 英语六级作文单词、例句总结
  3. C++高频面试问题总结
  4. python——pycharm使用入门
  5. spring batch 通过配置文件的方法读文件
  6. springboot和springcloud功能详细介绍
  7. Ctrl+Space冲突解决及输入法精简
  8. MATLAB中deg2rad和rad2deg函数的使用
  9. 5G-SUPI-SUPC-IMSI
  10. picpick尺子像素大小精度不够准确_picpick尺子像素大小精度不够准确_【论文解读】像素级分割里程碑算法——FCN全卷积神经网络......