当前位置: 首页 > news >正文

springboot如何获取控制层get和Post入参

一、在 Spring 配置中创建一个过滤器,将 HttpServletRequest 包装为 ContentCachingRequestWrapper

import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.util.ContentCachingRequestWrapper;
import java.io.IOException;@Component
public class xxxxFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {ContentCachingRequestWrapper wrappedRequest = new ContentCachingRequestWrapper(request);filterChain.doFilter(wrappedRequest, response);}
}

二、添加注解

import java.lang.annotation.*;@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnotation {String XXXX() default "";
}

三、添加切面

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;public class MyAspect {@Around("logPointcut() && @annotation(logAnnotation)")public Object around(ProceedingJoinPoint joinPoint, MyAnotation  myAnotation ) throws Throwable {// 获取当前 HttpServletRequestHttpServletRequest request = getCurrentHttpRequest();if (request != null) {// 判断请求方法if ("GET".equalsIgnoreCase(request.getMethod())) {String paramName = request.getParameter("name");System.out.println("GET 请求参数 name: " + paramName);} else if ("POST".equalsIgnoreCase(request.getMethod())) {String body = getRequestBody(request);String paramName = getParamFromBody(body, "name");System.out.println("POST 请求 body 参数 name: " + paramName);}}return joinPoint.proceed();}// 获取当前 HttpServletRequestprivate HttpServletRequest getCurrentHttpRequest() {ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();return attributes != null ? attributes.getRequest() : null;}// 读取 POST 请求体内容private String getRequestBody(HttpServletRequest request) {StringBuilder body = new StringBuilder();try (BufferedReader reader = request.getReader()) {String line;while ((line = reader.readLine()) != null) {body.append(line);}} catch (IOException e) {e.printStackTrace();}return body.toString();}// 从 JSON 请求体中解析指定参数private String getParamFromBody(String body, String paramName) {JSONObject jsonObject = JSON.parseObject(body);return jsonObject.getString(paramName);}
}
http://www.lryc.cn/news/484452.html

相关文章:

  • 30 秒!用通义灵码画 SpaceX 星链发射流程图
  • 设计模式之组合模式(营销差异化人群发券,决策树引擎搭建场景)
  • 关于做完 C# 项目的问题总结
  • CSS响应式布局实现1920屏幕1rem等于100px
  • 根据当前浏览器版本,下载或更新驱动文件为对应的版本
  • 【轻量化】YOLOv10 更换骨干网络之 MobileNetv4 | 模块化加法!非 timm 包!
  • 人体存在感应器设置时间开启感应人存在开灯,失效
  • 2024年09月CCF-GESP编程能力等级认证Python编程二级真题解析
  • Vuex vs Pinia:新一代Vue状态管理方案对比
  • es查询报错:too_many_buckets_exception
  • outlook邮箱关闭垃圾邮件——PowerAutomate自动化任务
  • 机器学习(七)——集成学习(个体与集成、Boosting、Bagging、随机森林RF、结合策略、多样性增强、多样性度量、Python源码)
  • vue跳转传参
  • 初识Linux · 共享内存
  • Illumina测序什么时候会测序到接头序列?
  • Element表格show-overflow-tooltip属性
  • 蓝桥杯竞赛单片机组备赛【经验帖】
  • 解密复杂系统:理论、模型与案例(3)
  • <项目代码>YOLOv8 番茄识别<目标检测>
  • docker安装到D盘
  • 【Java语言】String类
  • 【go从零单排】Directories、Temporary Files and Directories目录和临时目录、临时文件
  • Diff 算法的误判
  • odoo 17 后端路由接口认证自定义
  • 租赁回收系统小程序
  • SQL 注入详解:原理、危害与防范措施
  • 如何用Java爬虫“采集”商品订单详情的编程旅程
  • 《FreeRTOS任务基础知识篇》
  • 前端面试笔试(二)
  • 基于Python 和 pyecharts 制作招聘数据可视化分析大屏