java 获取post body_java通过HttpServletRequest获取post请求中的body内容-程序员宅基地

技术标签: java 获取post body  

原文链接:http://blog.csdn.net/feinifi/article/details/72990249

--------------------------------------------------------

在java web应用中,我们如何获取post请求body中的内容?以及需要注意的问题。

通常利用request获取参数可以直接通过req.getParameter(name)的方式获取url上面或者ajax data提交上来的参数。但是body是没有名字的,无法通过参数名字这种方式获取。这时候需要用到io流的方式来获取body中的内容。

这里先贴出一段代码:

package com.lenovo.servlet;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;

import org.apache.log4j.Logger;

import com.alibaba.dubbo.common.utils.IOUtils;

import com.lenovo.service.BusinessService;

import com.lenovo.utils.WebContext;

public class BusinessServlet extends HttpServlet{

public static final Logger log = Logger.getLogger(BusinessServlet.class);

/**

*

*/

private static final long serialVersionUID = 1L;

private static BusinessService service;

static{

service = (BusinessService) WebContext.getBean("businessService");

}

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

doPost(req, resp);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

BufferedReader reader = new BufferedReader(new InputStreamReader(req.getInputStream()));

String body = IOUtils.read(reader);

String name = req.getParameter("name");

if(StringUtils.isNotBlank(body)){

log.info("business receive somthing with body :"+body);

}

res.setCharacterEncoding("UTF-8");

res.setContentType("application/json");

res.setStatus(HttpServletResponse.SC_OK);

res.getWriter().println(service.getName(name));

}

}

在这段代码doPost方法中,用到了IO流来获取post提交的body,这样我们就获取了客户端提交的参数。

需要注意的是:获取body参数,需要在request.getParameter()方法之前调用(如果有需要取QueryString参数的话),因为一旦调用了getParameter()方法之后,再通过IO流的方式获取body参数就失效了(亲测返回"")。

另外,这里使用了dubbo-2.5.3.jar的IOUtils.read(reader)方法来读取post body的内容。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39626089/article/details/114230716

智能推荐

python可以实现科学计算吗_python科学计算-程序员宅基地

文章浏览阅读470次。python科学计算NumPy 是科学应用程序库的主要软件包之一,用于处理大型多维数组和矩阵,它大量的高级数学函数集合和实现方法使得这些对象执行操作成为可能。科学计算的另一个核心库是 SciPy。它基于 NumPy,其功能也因此得到了扩展。SciPy 主数据结构又是一个多维数组,由 Numpy 实现。这个软件包包含了帮助解决线性代数、概率论、积分计算和许多其他任务的工具。此外,SciPy 还封装了..._python不能用于科学计算

【自学Flutter】38 flutter_webview_plugin的使用-程序员宅基地

文章浏览阅读3.5k次。38 flutter_webview_plugin的使用1.源代码import 'package:flutter/material.dart';import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';void main() => runApp(MyApp());class MyApp extends..._flutter_webview_plugin

1.4最流行的NoSQL——Redis_最流行的nosql———redis-程序员宅基地

文章浏览阅读247次。本文比较重要的概念:NoSQL(及它的优点) Redis(及它的优点)Redis是当前互联网世界最为流行的NoSQL(Not Only SQL)NoSQL:在互联网中作用很大,可以在很大程度上提高互联网系统的性能。具备一定持久层的功能,也可以作为一种缓存工具注释:Redis缓存:是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API对于NoSQL数据库而言,作为持久层,它存储的数据使半结构化的,这意味着计算机在读入_最流行的nosql———redis

环面上 FHE 的快速自举:GSIS/GLWE & LUT/Automata & Blind Rotate_盲旋转-程序员宅基地

文章浏览阅读399次。TFHE 方案的盲旋转,它将环面以精度 $1/2N$ 离散化,然后使用 $v \in \mathbb T[X]/(X^N+1)$ 记录 “**反循环函数**”(满足 $f(x+1/2)=-f(x)$ 反对称性) $f(i/2N)$ 的 Lookup Table,使用自举秘钥 $E(si)$ 作为控制位,串行执行 MUX 实现对向量 $v$ 的循环移位,最后提取出 $f(b-s \cdot a) \in \mathbb T$ 的 TRLWE 密文。离散环面上的园整函数,恰好就是一个反循环函数。_盲旋转

服务器硬盘数据备份到nas,谁说固态硬盘做存储是鸡肋?NAS存储服务器还能这样玩...-程序员宅基地

文章浏览阅读3.6k次。原标题:谁说固态硬盘做存储是鸡肋?NAS存储服务器还能这样玩前一阵子美亚廉价10TB机械硬盘让不少拥有NAS或打算购买NAS的朋友狂欢了一把。不过双盘位、固态硬盘这些看似不入流的NAS玩法也有自己的特殊作用。 相比机械硬盘而言,固态硬盘零噪音、不怕震动,安装在小体积的双盘位NAS中可以直接放置到桌面上使用,而不必担心噪音的烦恼。特别是搭配东芝TR200这一类大容量、低功耗固态硬盘时,NAS的散热风..._nas 固态硬盘做存储

【QT】缺少Qt5Widgetsd.dll等文件的问题_qt5widgets.dll-程序员宅基地

文章浏览阅读2.4k次。在生成的exe文件处进入cmd命令行,执行命令。?.exe为工程生成的可执行文件名称。执行后目录下会出现对应的配置文件。_qt5widgets.dll

随便推点

基于风控特征相关度,挖掘贷中等场景中的存量客户价值|来看看相关实操_风控 建立存量客户的特征标签-程序员宅基地

文章浏览阅读836次。基于风控特征相关度,挖掘贷中等场景中的存量客户价值|来看看相关实操_风控 建立存量客户的特征标签

Internet Download Manager v6.36 Build 3 Final 注册版-IDM下载工具_ternet_download_manager 注册版-程序员宅基地

文章浏览阅读1.9k次。亲测可用Internet Download Manager(简称IDM)下载速度最多达其他下载工具5倍的下载具。Internet Download Manager的续传功能可以恢复因为断线、网络问题、计算机当机甚至无预警的停电导致下传到一半的软件。此程序具有动态档案分割、多重下载点技术,而且它会重复使用现有的联机,而不需再重新联机登入一遍。聪明的in-speed技术会动态地将所有设定应用到某种..._ternet_download_manager 注册版

华为Java社招面试经历详解【已拿到offer】_广州华为java招聘-程序员宅基地

文章浏览阅读3.2k次,点赞4次,收藏28次。这篇文章主要介绍了华为Java社招面试经历,详细记录了华为java面试的流程、相关面试题与参考答案,需要的朋友可以参考下。看看自己能答对多少,如果能回答70%的题目,就大胆去阿里以及各互联网公司试试身手吧。本篇建议大家收藏、备用~华为Java社招面试(已拿到offer)之前月底华为cloudsop部门打电话叫我要不要面试,当时正处于换工作的期间,于是就把简历发给华为hr,人事审核后经过一些列面试、机试,最终顺利拿到了offer,出于未来职业规划的考量,本人手里还有其他的一些offer,还没有定下来,顺_广州华为java招聘

linux线程的基本知识_linux加锁失败的状态符-程序员宅基地

文章浏览阅读2.6k次。使用自旋锁的时候,当发生多线程竞争锁的情况,加锁失败的线程会忙等待,直到拿到锁。2、 fork两次,第一次fork的子进程在fork完成后直接退出,这样第二次fork得到的子进程就没有爸爸了,它会自动被老祖宗init收养,init会负责释放它的资源,这样就不会有“僵尸”产生了。线程的等待,第一个参数是线程的id,第二个一般为NULL,表示不关心退出的状态。第一个参数是线程id的地址。互斥锁加锁失败后,会从用户态陷入到内核态,让内核帮助我们切换线程,虽然简化了使用锁的难度,但是存在一定的性能开销成本。_linux加锁失败的状态符

000_coolprop_in_matlab在Matlab中使用CoolProp-程序员宅基地

文章浏览阅读1.2k次,点赞26次,收藏12次。在Matlab中调用Python需要先设置Python的路径(pyenv在Matlab中调用Python的函数有两种方式,一种是使用py函数,一种是使用函数;在Matlab中调用Python的CoolProp接口,需要导入CoolProp模块,然后调用函数即可。可以写一个Matlab函数,来调用PropsSI函数。使用函数;在Matlab中调用Python的CoolProp接口,需要导入CoolProp模块,然后调用函数即可。可以写一个Matlab函数,来调用PropsSI函数。_matlab中使用coolprop