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

智能推荐

虚拟机如何在net模式下进行联网_虚拟机net网络-程序员宅基地

文章浏览阅读1.7k次,点赞3次,收藏7次。虚拟机如何在net模式下进行联网(centos7)1.首先你需要先将虚拟机安装好,如果不会可以参考[centos7安装教程](https://blog.csdn.net/qq_44714603/article/details/88829423?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161949204316780274178621%2522%252C%2522scm%2522%253A%252220140713.130102334…_虚拟机net网络

python中的range()函数_python range函数-程序员宅基地

文章浏览阅读6.5w次,点赞59次,收藏241次。range()函数:用于生成一个整数序列;range()的三种创建方式:第一种:只有一个参数(小括号中只给了一个数)即range(stop)例如:range(10)指的是默认从0开始,步长为1,不包括10;注意:的运行结果为:;要想输出0-9的数字序列则应该是的结果为;第二种:range(start,stop) (给了两个参数,即小括号中给了两个数)r=range(1,10) print(list(r)) 运行结果为:;第三种:range(start,stop,step):._python range函数

数据的四种基本存储方法_数据存储-程序员宅基地

文章浏览阅读2.5k次。数据的四种基本存储方法,(1)顺序存储方法(2)链接存储方法(3)索引存储方法(4)散列存储方法_数据存储

Mysql启用SSL以及JDBC连接Mysql配置_jdbc mysql ssl-程序员宅基地

文章浏览阅读6.7k次。一、Mysql启用SSL配置1.检查mysql是否支持ssl在linux端用root账号进入mysql命令行界面,查看当前版本mysql数据库是否支持ssl,如果出现以下结果表示支持,如果没有考虑更换版本,或者编译一个带有SSL版本的mysqlshell>show variables like ‘%ssl%’;2.设置用户是否使用ssl连接1.查看用户是否使用SSL连接she..._jdbc mysql ssl

java jwt使用,springboot 整合java-jwt,java jwt工具类-程序员宅基地

文章浏览阅读612次。java jwt使用,springboot 整合java-jwt,java jwt工具类================================Copyright 蕃薯耀2020-12-03https://www.cnblogs.com/fanshuyao/一、引入java-jwt的maven依赖<dependency> <groupId>..._jwtproperties

聊聊 Kafka: 在 Linux 环境上搭建 Kafka,Linux运维未来路在何方-程序员宅基地

文章浏览阅读753次,点赞21次,收藏15次。列出现有主题,创建主题,该主题包含一个分区,该分区为Leader分区,它没有Follower分区副本。启动成功,可以看到控制台输出的最后一行的started状态:此时kafka安装成功。查看zookeeper状态,zookeeper启动成功,再启动kafka。onsole-producer.sh用于生产消息**开启消费者和生产者,生产并消费消息。开启消费者和生产者,生产并消费消息。在Zookeeper中的根节点路径。创建主题,该主题包含多个分区。的地址,此处使用本地启动的。查看指定主题的详细信息。

随便推点

麒麟820也迎来鸿蒙系统,魅族适配麒麟820系统 和鸿蒙OS,魅族要入赘华为系-程序员宅基地

文章浏览阅读188次。蜗居在珠海的小厂魅族,虽然是“小厂”,但是其一路走来的历史,一直被科技圈津津乐道,而深入简出的带头大哥黄章,更是魅友的精神领袖。魅族是一个很低调的企业,但是却有这样一种魅力,总能有意无意的成为新闻的主角,比如近日知名科技大V中国IT杂谈发布了这样一条微博:魅族正在适配麒麟820和鸿蒙系统,未来还要加入华为系。关于这条信息的真实性后面再说,我们先来讨论下华为和魅族是否真的可以成为CP,共同走向人生巅..._鸿蒙420支持麒麟820吗

GoLand live template自定义模板失效问题解决_live template 在jsp中不生效-程序员宅基地

文章浏览阅读306次。GoLand live template自定义模板失效问题解决_live template 在jsp中不生效

STM32F103 外部中断(EXTI)介绍以及代码_stm32f103的exti16连接到 事件,exti17连接到 事件,exti18连接到 事件。s-程序员宅基地

文章浏览阅读603次。如果用 GPIO 作为外部中断,需要配置 AFIO,来选择是哪个端口,可以是 GPIOA/GPIOB/GPIOC/GPIOD/GPIOE/GPIOF/GPIOG,需要注意的是,对于同一个 Pin 脚,只能选择配置一个端口,例如我配置 Pin15 为 GPIOC,那么就不能再用用 GPIOA/B/D/E/F/G 15 作为 EXTI ,如下图所示。②Edge Detect :边缘检测,可以是上升沿触发,也可以是下降沿触发,还可以是上升沿和下降沿都可以分别触发,对应图中 ②-1 和 ②-2。_stm32f103的exti16连接到 事件,exti17连接到 事件,exti18连接到 事件。stm32f

在anaconda环境中使用conda命令安装cuda、cudnn、tensorflow(-gpu)、pytorch_conda安装cudnn-程序员宅基地

文章浏览阅读9.2w次,点赞109次,收藏364次。conda环境中使用conda命令安装cuda、cudnn、tensorflow(-gpu)、pytorch_conda安装cudnn

2742: 【数据结构】【栈】字符串匹配问题-程序员宅基地

文章浏览阅读346次,点赞6次,收藏8次。字符串中只含有括号 (),[],,{},判断输入的字符串中括号是否匹配。如果括号有互相包含的形式,从内到外必须是,(),[],{},例如。输入: [()] 输出:YES,而输入([]), ([])都应该输出NO。文件的第一行为一个整数n(0

CSS的继承性和层叠式_css继承与层叠-程序员宅基地

文章浏览阅读689次。color、text-开头的、line-开头的,font-开头的这些关于文字样式的,都可以继承;所有的盒子的、定位的、布局属性都不能继承。多个选择器同时作用在同一个元素上时候,看权重,那个高,最后显示那个,优先级从高到低分别是:先比较ID选择器数量,在比较类选择器数量,最后比较标签选择器数量最后显示的绿色,因为ID选择器数量优先级高,所以以2为准了,如果都一样,谁写在后面,谁的生效。如果不能直接选中某个元素权重是0,如通过继承而来的权重是0,开始数权重之前一定要看看是不是真的选中文字所在的最内层的标签,没选_css继承与层叠

推荐文章

热门文章

相关标签