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

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

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

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

热门文章

  1. iwebshop 简介
  2. 修改mp4文件的moov atom,使其位置在文件的前面
  3. PCL安装教程 1.8.0+VS2013+cmake+QT5.5.1
  4. 今日记录:JIRA使用指南
  5. android mvp模式弊端,《android-MVP模式的困惑》
  6. github国内网访问方式
  7. [组合数学] 排列组合
  8. 隐藏域hidden的使用-HTML入门基础(024)
  9. ARouter原理分析
  10. Android即时通讯--仿QQ即时聊天:(五)聊天模块