Netty取Http Post body
最近在搭网关,各种问题各种百度谷歌,
解决问题需要耐心,有时看源码,看不下去同事问问,想换换脑子。
遇到有责任心的人还好,总有一批人说空话。。。
以下代码主要是解析http请求的参数,含get,标黄的是重点
package com.my.gateway;import com.my.util.JsonUtils; import com.my.util.HttpUtil; import io.netty.handler.codec.http.*; import io.netty.handler.codec.http.multipart.Attribute; import io.netty.handler.codec.http.multipart.HttpPostRequestDecoder; import io.netty.handler.codec.http.multipart.InterfaceHttpData; import io.netty.util.CharsetUtil;import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map;public class ParamParser {private FullHttpRequest request;private String umCode;/** * 构造一个Http请求参数解析器 * @param request */ public ParamParser(FullHttpRequest request, String umCode) {this.request = request;this.umCode=umCode;}/** * 解析请求参数 * @return 包含所有请求参数的键值对, 如果没有参数, 则返回空Map * * @throws IOException */ public Map<String, Object> parse() throws Exception {HttpMethod method = request.getMethod();Map<String, Object> parmMap = new HashMap<String, Object>();parmMap.put("umCode", this.umCode);if (HttpUtil.isGetMethod(request)) {// 是GET请求 QueryStringDecoder decoder = new QueryStringDecoder(request.getUri());decoder.parameters().entrySet().forEach( entry -> {// entry.getValue()是一个List, 只取第一个元素 parmMap.put(entry.getKey(), entry.getValue().get(0));});} else if (HttpUtil.isPostMethod(request)) { // 是POST请求 //HttpContent content = new DefaultHttpContent(Unpooled.wrappedBuffer(request.content())); HttpPostRequestDecoder decoder = new HttpPostRequestDecoder(request);if(request.content().isReadable()){String json=request.content().toString(CharsetUtil.UTF_8);parmMap.putAll(JsonUtils.getMapFromJSON(json));}decoder.offer(request);//form List<InterfaceHttpData> parmList = decoder.getBodyHttpDatas();for (InterfaceHttpData parm : parmList) {Attribute data = (Attribute) parm;parmMap.put(data.getName(), data.getValue());}} else {// 不支持其它方法 throw new Exception("除[GET|POST]外,不支持其它方法!!!");}return parmMap;} }
Netty取Http Post body相关推荐
- netty与tomcat等nio的比较(取自zhh2009在论坛里的发言)
源讨论: http://www.iteye.com/topic/909206?page=3 另外见整理:[url=http://vanadiumlin.iteye.com/blog/1144989]n ...
- 面试官问:服务的心跳机制与断线重连,Netty底层是怎么实现的?懵了
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, ...
- 徒手撸了一个API网关,理解更透彻了,代码已上传github,自取~
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 一.背景 最近在github上看了soul网关的设计,突然 ...
- 【Netty】入门Netty官方例子解析(一)写个 Discard Server
本文以Netty官方给出的列子来讲解Netty带你一步步进入Netty.Netty最全教程在这里 Getting Started 版本 netty4 maven依赖: <!-- https:// ...
- Netty实现自定义简单的编解码器(二)
2019独角兽企业重金招聘Python工程师标准>>> Netty实现自定义简单的编解码器(二) 关于编解码器请参见:http://my.oschina.net/xinxingege ...
- 高性能NIO框架Netty入门篇
http://cxytiandi.com/blog/detail/17345 Netty介绍 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具 ...
- netty 对 protobuf 协议的解码与包装探究(2)
netty 默认支持protobuf 的封装与解码,如果通信双方都使用netty则没有什么障碍,但如果客户端是其它语言(C#)则需要自己仿写与netty一致的方式(解码+封装),提前是必须很了解net ...
- netty源码分析系列——EventLoop
2019独角兽企业重金招聘Python工程师标准>>> 前言 EventLoop也是netty作为一个事件驱动架构的网络框架的重要组成部分,netty主要通过它来实现异步编程,从前面 ...
- netty中的future和promise源码分析(二)
前面一篇netty中的future和promise源码分析(一)中对future进行了重点分析,接下来讲一讲promise. promise是可写的future,从future的分析中可以发现在其中没 ...
最新文章
- 进化算法_遗传算法相关资料
- 比特币现金今日价格_比特币现金价格_今日比特币现金价格_06.12 上午 比特币现金价格 6060.87
- ubuntu更改mysql的编码配置
- 实现程序间的数据传递
- boost::sort模块实现spreadsort 字符串函子排序示例
- SciPy--数值计算
- JDK 12附带紧凑数字格式
- lightoj 1037 - Agent 47(状压dp)
- 对一句正则表达式的理解
- Sqlserver2005迁移至Oracle系列之二:生成存储过程
- 《圈圈教你玩USB》之 USB鼠标 描述符
- 存储器的分类及层次结构
- Windows 10 如何修改桌面路径位置
- vb.net 简单取摄像头图片_简单的BP网络识别液晶字符
- 误Ghost后的分区恢复
- 傲腾这么厉害?QLC闪存笑了!
- 苹果的破局几招:修漏洞、降价、官方认证翻新机……
- 简单的stm32入门小程序(交通信号灯)STM32F103C8T6
- 吴秀波事件女主,被耽误的高阶玩家,一年12个月烧钱游遍全世界
- 为什么Python是2023最值得学的编程语言?
热门文章
- 2010年国际信息安全技术(天津)大会-----所见,所闻,所思
- java studio下载_Android Studio 安装
- siesta在Linux运行,Installation of NetCDF(Linux下siesta集成NetCDF)
- 数字计算机模拟人脑,人造突触问世,计算机模拟人脑不是梦
- 理解逻辑回归中的后验概率和损失函数
- H5 中使用SVGA 动画
- Unity2019.4.26 | Vuforia9.8.8 实现3d物体识别
- 很久以前用vue全家桶写的一个仿Mac桌面,挺有意思的
- 12306 Bug:一张身份证,竟买了同一趟车的两张票
- 深度学习Pytorch/Caffe-GPU环境配置