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的分析中可以发现在其中没 ...
最新文章
- gulp-rev:项目部署缓存解决方案----gulp系列(六)
- Toolbar-5.0新特性
- 13--长度最小的子数组
- 淘宝天猫店铺,竞争对手卖同款产品,价格比我低,标题一模一样,如何应对?
- matlab求系统根轨迹和系统增益,控制系统的根轨迹分析
- java 菜单快捷键_Java为菜单栏添加快捷键
- axure删除的页面怎么恢复_Axure高保真还原Web首页布局和交互教程
- EM最大期望算法与jensen不等式
- vue-app之H5打开第三方app
- pika在codis中的探索
- android 高度百分比,Android 屏幕适配-百分比布局适配
- 52 jQuery-使用fadeIn()和fadeOut()方法实现淡入淡出效果
- 瑞萨can入门书学习三
- 在印度与软件相关的发明可不可以申请专利?
- 为 什 么 有 的 文 件 不 可 以 重 命 名
- Vue项目搭建手把手教学
- 保存HLS直播中的TS流分片
- 基于GAN的图像配准汇总
- 华为外包项目的测试流程
- 计算机语言输入法,输入法不见了如何解决