[工具类] post请求 获取request对象, 获取request的请求体(body)参数
目录
引言:
1. 获取request对象的几种常用方式
-> 1.1 获取请求对象 通过请求上下文对象 获取信息[推荐]
-> 1.2 在controller层直接获取[不推荐 侵害性太强]
-> 1.3 interceptor中获取[部分业务中使用]
-> 1.4 request常用api简介
2. 获取request的body的工具类如下:
3. 使用方式:
引言:
request对象获取url uri param参数 但是没有直接的api去查看body参数,参考1.4
1. 获取request对象的几种常用方式
-> 1.1 获取请求对象 通过请求上下文对象 获取信息[推荐]
RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) attributes;
HttpServletRequest request = servletRequestAttributes.getRequest();
-> 1.2 在controller层直接获取[不推荐 侵害性太强]
@PostMapping("/add")@ApiOperation("添加用户")public ResultResponse add(@Validated @RequestBody UserReqDTO userReqDTO, HttpServletRequest request) {userService.addUserMsg(userReqDTO,request);return ResultResponse.ok("添加成功!");}
-> 1.3 interceptor中获取[部分业务中使用]
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {}
-> 1.4 request常用api简介
1.getRequestURL()方法返回客户端发出请求时的完整URL http:localhost:8080/aaa/bbb
2.getRequestURI()方法返回请求行中的资源名 /aaa/bbb
3.getQueryString()方法返回请求行的参数部分。
4.getRemoteAddr()方法返回发出请求的客户机的IP地址。
5.getRemoteHost()方法返回发出请求的客户机的完整主机名。
6.getRemotePort()方法返回客户机所使用的网络端口号。
7.getLocalAddr()方法返回服务器的IP地址。
8.getLocalName()方法返回服务器的主机名。
9.getMethod()得到客户机请求方式。
2. 获取request的body的工具类如下:
原因: api中没有获取body的方法
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;
import java.io.*;/*** 请求体工具类** @author pzy* @version 0.1.0*/
public class RequestBodyUtils {private static final int BUFFER_SIZE = 1024 * 8;/*** read string.** @param reader Reader instance.* @return String.* @throws IOException*/public static String read(Reader reader) throws IOException {try (StringWriter writer = new StringWriter()) {write(reader, writer);return writer.getBuffer().toString();}}/*** write.** @param reader Reader.* @param writer Writer.* @return count.* @throws IOException*/public static long write(Reader reader, Writer writer) throws IOException {return write(reader, writer, BUFFER_SIZE);}/*** write.** @param reader Reader.* @param writer Writer.* @param bufferSize buffer size.* @return count.* @throws IOException*/public static long write(Reader reader, Writer writer, int bufferSize) throws IOException {int read;long total = 0;char[] buf = new char[bufferSize];while ((read = reader.read(buf)) != -1) {writer.write(buf, 0, read);total += read;}return total;}/*** 获取requestBody*/public static String getRequestBody() throws IOException {RequestAttributes attributes = RequestContextHolder.getRequestAttributes();ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) attributes;assert servletRequestAttributes != null;HttpServletRequest request = servletRequestAttributes.getRequest();BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));//读取输入流的内容转换为String类型IOUtils必须引入org.apache.dubbo.common.utils.IOUtils;包return RequestBodyUtils.read(reader);}}
3. 使用方式:
当有请求的时候 需要获取 直接调用就可以, JSONObject对象-> 需要的DTO对象
String requestBody = RequestBodyUtils.getRequestBody();
JSONObject jsonObject = JSONObject.parseObject(requestBody);
相关文章:
[工具类] post请求 获取request对象, 获取request的请求体(body)参数
目录 引言: 1. 获取request对象的几种常用方式 -> 1.1 获取请求对象 通过请求上下文对象 获取信息[推荐] -> 1.2 在controller层直接获取[不推荐 侵害性太强] -> 1.3 interceptor中获取[部分业务中使用] -> 1.4 request常用api简介 2. 获取request的body的工具…...
Golang 多版本安装小工具G
voidint制作的Golang版本安装管理,非常好用。想装就装,想换版本就换版本 除了一些使用go install的场景可能有不兼容,主要是安装了工具有时候不能直接用。 GitHub - voidint/g: Golang Version Manager 使用方式很简单&a…...
day29—选择题
文章目录1.HashSet子类依靠什么方法区分重复元素(C)2.以下代码在编译和运行过程中会出现什么情况(A)3.有这么一段程序,执行的结果是(C)1.HashSet子类依靠什么方法区分重复元素(C&…...
day8 互斥锁/读写锁的概念及使用、死锁的避免
目录 互斥锁的概念和使用 线程通信 - 互斥 互斥锁的创建和销毁 互斥锁的创建 互斥锁的销毁 互斥锁的使用 申请锁 释放锁 互斥锁的概念和使用 线程通信 - 互斥 临界资源: 一次只允许一个任务(进程、线程)访问的共享资源;…...
2023-04-13 monetdb-str类型变长存储-分析
摘要: monetdb的列的基本抽象是BAT,但是对于列数据的存储方式, 对于固定长度和不固定长度,使用了不同的存储方式。 固定长度的数据比如int,int64之类的, 直接存储在了数据tail文件。 但是对于不固定长度比如string, 则使用另外一个独立的theap文件存储, tail文件仅保留对于…...
011:Mapbox GL两种方式隐藏logo和版权,个性化版权的声明
第011个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中用两种方式隐藏logo和版权,并个性化版权的声明 。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共91行)相关API参考:专栏目标示例效果 配置方式…...
结合PCA降维的DBSCAN聚类方法(附Python代码)
目录 前言介绍: 1、PCA降维: (1)概念解释: (2)实现步骤: (3)优劣相关: 2、DBSCAN聚类: (1)概念解释&a…...
限流:计数器、漏桶、令牌桶 三大算法的原理与实战(史上最全)
限流 限流是面试中的常见的面试题(尤其是大厂面试、高P面试) 注:本文以 PDF 持续更新,最新尼恩 架构笔记、面试题 的PDF文件,请到文末《技术自由圈》公号获取 为什么要限流 简单来说: 限流在很多场景中用来…...
Redis用于全局ID生成器、分布式锁的解决方案
全局ID生成器 每个店铺都可以发布优惠卷 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增id就存在一些问题: 1.id的规律性太明显 2.受单表数据量的限制 全局ID生成器,是一种在分布式系…...
OpenTex 企业内容管理平台
OpenText 企业内容管理平台 将内容服务与领先应用程序集成,弥合内容孤岛、加快信息流并扩大治理 什么是内容服务集成? 内容服务集成通过将内容管理平台与处于流程核心的独立应用程序和系统连接起来,支持并扩展了 ECM 的传统优势。 最好的内…...
【0基础学爬虫】爬虫基础之数据存储
大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学…...
Redis与本地缓存组合使用(IT枫斗者)
Redis与本地缓存组合使用 前言 我们开发中经常用到Redis作为缓存,将高频数据放在Redis中能够提高业务性能,降低MySQL等关系型数据库压力,甚至一些系统使用Redis进行数据持久化,Redis松散的文档结构非常适合业务系统开发…...
手把手教你学习IEC104协议和编程实现 十 故障事件与复位进程
故障事件 目的 在IEC104普遍应用之前,据我了解多个协议,再综合自动化协议中,有这么一个概念叫“事故追忆”,意思是当变电站出现事故的时候,不但要记录事故的时间,还需记录事故前后模拟量的数据,从而能从一定程度上分析事故产生的原因,这个模拟量就是和今天讲解的故障…...
浅析分布式理论的CAP
大家好,我是易安! 今天让我们来聚焦于分布式系统架构中的重要理论——CAP理论。在分布式系统中,可用性和数据一致性是两个至关重要的因素,而CAP理论就是在这两者之间提供了一种权衡的原则,帮助我们在设计分布式系统时进…...
使用 TensorFlow 构建机器学习项目:6~10
原文:Building Machine Learning Projects with TensorFlow 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象&#x…...
使用 LXCFS 文件系统实现容器资源可见性
使用 LXCFS 文件系统实现容器资源可见性一、基本介绍二、LXCFS 安装与使用1.安装 LXCFS 文件系统2.基于 Docker 实现容器资源可见性3.基于 Kubernetes 实现容器资源可见性前言:Linux 利用 Cgroup 实现了对容器资源的限制,但是当在容器内运行 top 命令时就…...
SQL LIMIT
SQL LIMIT SQL LIMIT子句简介 要检索查询返回的行的一部分,请使用LIMIT和OFFSET子句。 以下说明了这些子句的语法: SELECT column_list FROMtable1 ORDER BY column_list LIMIT row_count OFFSET offset;在这个语法中, row_count确定将返…...
OpenCV实战之人脸美颜美型(六)——磨皮
1.需求分析 有个词叫做“肤若凝脂”,直译为皮肤像凝固的油脂,形容皮肤洁白且光润,这是对美女的一种通用评价。实际生活中我们的皮肤多少会有一些毛孔、斑点等表现,在观感上与上述的“光润感”相反,因此磨皮也成为美颜算法中的一项基础且重要的功能。让皮肤变得更加光润,就…...
Java技术栈—重装系统后不重新安装也能正常使用的设置方式
声明: 最近在重装电脑,重装完后,开发工具会有些功能使用不了,在这做个记录!这里是 JAVA 技术栈 问题描述: git 右键无菜单 111 git git 右键无菜单 参考文章:注册表修复git右键无菜单 git …...
智驾升级!ADB+AFS「起势」
目前,乘用车前大灯已经完成从传统卤素、氙气到LED的转型升级,高工智能汽车研究院监测数据显示,2022年中国市场(不含进出口)乘用车前装标配LED前大灯搭载率达到75.99%,同比2021年提高约7个百分点。 而相比而…...
告别内网穿透:OpenWrt软路由IPv6配置实战与DDNS部署指南
1. 为什么我们需要IPv6? 最近几年,越来越多的朋友发现家里的宽带已经拿不到IPv4公网地址了。我自己用的移动宽带就是这样,光猫改桥接后用软路由拨号,拿到的永远是个100开头的内网IP。打电话给运营商,客服很客气地告诉我…...
3步解决AKShare金融数据接口stock_zh_a_spot_em异常:完整数据获取指南
3步解决AKShare金融数据接口stock_zh_a_spot_em异常:完整数据获取指南 【免费下载链接】aktools AKTools is an elegant and simple HTTP API library for AKShare, built for AKSharers! 项目地址: https://gitcode.com/gh_mirrors/ak/aktools AKTools作为一…...
OpenMC多群截面计算的3个颠覆性优化策略:从理论到工程实践
OpenMC多群截面计算的3个颠覆性优化策略:从理论到工程实践 【免费下载链接】openmc OpenMC Monte Carlo Code 项目地址: https://gitcode.com/gh_mirrors/op/openmc 核反应堆物理计算中,多群截面精度直接决定了整个模拟系统的可靠性。传统方法在处…...
Wand-Enhancer:三步解锁WeMod Pro功能的终极免费方案
Wand-Enhancer:三步解锁WeMod Pro功能的终极免费方案 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod专业版的订阅费用而烦恼吗&…...
从汽车到工控:手把手教你用TJA1050和SN65HVD230搞定不同电压域的CAN节点互联
从汽车到工控:手把手教你用TJA1050和SN65HVD230搞定不同电压域的CAN节点互联 在汽车电子与工业控制系统的融合设计中,工程师常面临一个典型挑战:如何将5V供电的汽车电子模块(如TJA1050)与3.3V供电的工业控制器…...
知网AIGC检测算法原理解读:知网如何判断AI写作2026年免费应对完整深度分析
知网AIGC检测算法原理解读:知网如何判断AI写作2026年免费应对完整深度分析 关于知网AIGC检测算法解读,我整理了几个核心问题,逐一分析。 实战方案先给出来:应对AIGC检测最有效的是专业工具深层文本重构,嘎嘎降AI&…...
从零到一:在Linux上构建USRP与GNU Radio的完整信号处理工坊
1. 环境准备:打造你的信号处理工坊基础 搭建信号处理工坊就像装修新房,得先打好地基。我强烈推荐使用Ubuntu 20.04 LTS系统,这个版本不仅稳定,而且社区支持完善。记得第一次尝试时用了最新版系统,结果各种依赖冲突让我…...
技能开发套件(SDK)设计:从模块化到事件驱动的开发者效率工具
1. 项目概述:一个被低估的开发者效率工具如果你是一名开发者,尤其是经常需要与各种API、服务或硬件设备打交道的全栈或嵌入式工程师,那么你一定经历过这样的场景:为了测试一个新接口,你需要写一堆样板代码来初始化连接…...
Arduino开发板选型指南:从性能、接口到场景化决策
1. 项目概述:为什么Arduino选型是个技术活刚接触Arduino或者准备开始一个新项目时,面对琳琅满目的开发板型号,你是不是也感到过一丝迷茫?从经典的Uno到功能强大的Mega,再到小巧玲珑的Micro和专为可穿戴设计的Flora&…...
10分钟上手wired-elements:打造超萌手绘风UI界面的完整指南
10分钟上手wired-elements:打造超萌手绘风UI界面的完整指南 【免费下载链接】wired-elements Collection of custom elements that appear hand drawn. Great for wireframes or a fun look. 项目地址: https://gitcode.com/gh_mirrors/wi/wired-elements wi…...
