当前位置: 首页 > 编程笔记 >

java通过HttpServletRequest获取post请求中的body内容的方法

方宜
2023-03-14
本文向大家介绍java通过HttpServletRequest获取post请求中的body内容的方法,包括了java通过HttpServletRequest获取post请求中的body内容的方法的使用技巧和注意事项,需要的朋友参考一下

在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的内容。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 我想从Java Servlet的POST请求中读出数据。这个servlet在Geoserver上作为服务运行,用URL调用。 发布请求(使用python脚本创建): Java servlet: 输出: 问题: 为什么我不能读出xml数据体?请求有问题,数据没有传递给Java吗? 编辑1: 使用Inputstream尝试其他方法,但正文始终是空行。可能是服务器在创建请求对象时忽略了Body并仅使用头

  • 在 Nginx 的典型应用场景中,几乎都是只读取 HTTP 头即可,例如负载均衡、正反向代理等场景。但是对于 API Server 或者 Web Application ,对 body 可以说就比较敏感了。由于 OpenResty 基于 Nginx ,所以天然的对请求 body 的读取细节与其他成熟 Web 框架有些不同。 最简单的 “Hello ****” 我们先来构造最简单的一个请求,POST

  • 本文向大家介绍.net core webapi通过中间件获取请求和响应内容的方法,包括了.net core webapi通过中间件获取请求和响应内容的方法的使用技巧和注意事项,需要的朋友参考一下 本文主要根据中间件来实现对.net core webapi中产生的请求和响应数据进行获取并存入日志文件中; 这里不详细介绍日志文件的使用。你可以自己接入NLog,log4net,Exceptionless

  • 我正在使用嵌入Java的netty 4.1,并尝试从管道中的客户端POST请求中检索数据。我在网上找到了几种选择,但都没用。。。 也许有人对此有一个有用的想法。 向所有提供帮助的人致以问候和感谢。 管道: 处理程序:

  • 问题内容: 我没有找到解决问题的示例,因此想向你寻求帮助。我不能简单地使用JSON中的RestTemplate对象发送POST请求 每当我得到: 我以这种方式使用RestTemplate: 我怎么了 问题答案: 这项技术对我有用: 我希望这有帮助