最近在搭网关,各种问题各种百度谷歌,

解决问题需要耐心,有时看源码,看不下去同事问问,想换换脑子。

遇到有责任心的人还好,总有一批人说空话。。。

以下代码主要是解析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相关推荐

  1. netty与tomcat等nio的比较(取自zhh2009在论坛里的发言)

    源讨论: http://www.iteye.com/topic/909206?page=3 另外见整理:[url=http://vanadiumlin.iteye.com/blog/1144989]n ...

  2. 面试官问:服务的心跳机制与断线重连,Netty底层是怎么实现的?懵了

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, ...

  3. 徒手撸了一个API网关,理解更透彻了,代码已上传github,自取~

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 一.背景 最近在github上看了soul网关的设计,突然 ...

  4. 【Netty】入门Netty官方例子解析(一)写个 Discard Server

    本文以Netty官方给出的列子来讲解Netty带你一步步进入Netty.Netty最全教程在这里 Getting Started 版本 netty4 maven依赖: <!-- https:// ...

  5. Netty实现自定义简单的编解码器(二)

    2019独角兽企业重金招聘Python工程师标准>>> Netty实现自定义简单的编解码器(二) 关于编解码器请参见:http://my.oschina.net/xinxingege ...

  6. 高性能NIO框架Netty入门篇

    http://cxytiandi.com/blog/detail/17345 Netty介绍 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具 ...

  7. netty 对 protobuf 协议的解码与包装探究(2)

    netty 默认支持protobuf 的封装与解码,如果通信双方都使用netty则没有什么障碍,但如果客户端是其它语言(C#)则需要自己仿写与netty一致的方式(解码+封装),提前是必须很了解net ...

  8. netty源码分析系列——EventLoop

    2019独角兽企业重金招聘Python工程师标准>>> 前言 EventLoop也是netty作为一个事件驱动架构的网络框架的重要组成部分,netty主要通过它来实现异步编程,从前面 ...

  9. netty中的future和promise源码分析(二)

    前面一篇netty中的future和promise源码分析(一)中对future进行了重点分析,接下来讲一讲promise. promise是可写的future,从future的分析中可以发现在其中没 ...

最新文章

  1. 进化算法_遗传算法相关资料
  2. 比特币现金今日价格_比特币现金价格_今日比特币现金价格_06.12 上午 比特币现金价格 6060.87
  3. ubuntu更改mysql的编码配置
  4. 实现程序间的数据传递
  5. boost::sort模块实现spreadsort 字符串函子排序示例
  6. SciPy--数值计算
  7. JDK 12附带紧凑数字格式
  8. lightoj 1037 - Agent 47(状压dp)
  9. 对一句正则表达式的理解
  10. Sqlserver2005迁移至Oracle系列之二:生成存储过程
  11. 《圈圈教你玩USB》之 USB鼠标 描述符
  12. 存储器的分类及层次结构
  13. Windows 10 如何修改桌面路径位置
  14. vb.net 简单取摄像头图片_简单的BP网络识别液晶字符
  15. 误Ghost后的分区恢复
  16. 傲腾这么厉害?QLC闪存笑了!
  17. 苹果的破局几招:修漏洞、降价、官方认证翻新机……
  18. 简单的stm32入门小程序(交通信号灯)STM32F103C8T6
  19. 吴秀波事件女主,被耽误的高阶玩家,一年12个月烧钱游遍全世界
  20. 为什么Python是2023最值得学的编程语言?

热门文章

  1. 2010年国际信息安全技术(天津)大会-----所见,所闻,所思
  2. java studio下载_Android Studio 安装
  3. siesta在Linux运行,Installation of NetCDF(Linux下siesta集成NetCDF)
  4. 数字计算机模拟人脑,人造突触问世,计算机模拟人脑不是梦
  5. 理解逻辑回归中的后验概率和损失函数
  6. H5 中使用SVGA 动画
  7. Unity2019.4.26 | Vuforia9.8.8 实现3d物体识别
  8. 很久以前用vue全家桶写的一个仿Mac桌面,挺有意思的
  9. 12306 Bug:一张身份证,竟买了同一趟车的两张票
  10. 深度学习Pytorch/Caffe-GPU环境配置