Em uma aplicação web java, como obtemos o conteúdo no corpo da pós-solicitação? e questões que precisam de atenção.
Normalmente, usando solicitação para obter parâmetros, você pode obter os parâmetros diretamente na URL ou enviados por dados ajax através de req.getParameter(name). Porém, o corpo não tem nome e não pode ser obtido por meio de nomes de parâmetros. Neste momento, você precisa usar o fluxo io para obter o conteúdo do corpo.
Aqui está um trecho de código postado primeiro:
pacote com.lenovo.servlet; importar java.io.BufferedReader; importar java.io.IOException; importar java.io.InputStreamReader; importar javax.servlet.ServletException; importar javax.servlet.http.HttpServlet; importar javax.servlet.http.HttpServletRequest; importar javax.servlet.http.HttpServletResponse; importar org.apache.commons.lang.StringUtils; importar org.apache.log4j.Logger; importar com.alibaba.dubbo.common.utils.IOUtils; importar com.lenovo.service.BusinessService; importar com.lenovo.utils.WebContext; classe pública BusinessServlet estende HttpServlet{ public static final Logger log = Logger.getLogger(BusinessServlet.class); /** * */ privado estático final longo serialVersionUID = 1L; serviço BusinessService estático privado; estático{ serviço = (BusinessService) WebContext.getBean("businessService"); } @Override protegido void doGet(HttpServletRequest req, HttpServletResponse resp) lança ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse res) lança ServletException, IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(req.getInputStream())); String corpo = IOUtils.read(leitor); String nome = req.getParameter("nome"); if(StringUtils.isNotBlank(body)){ log.info("negócio recebe algo com body :"+body); } res.setCharacterEncoding("UTF-8"); res.setContentType("aplicativo/json"); res.setStatus(HttpServletResponse.SC_OK); res.getWriter().println(service.getName(nome)); } }No método doPost deste código, o fluxo IO é utilizado para obter o corpo enviado pelo post, para que possamos obter os parâmetros enviados pelo cliente.
Deve-se observar que: para obter os parâmetros do corpo, você precisa chamá-lo antes do método request.getParameter() (se precisar obter o parâmetro QueryString), pois uma vez chamado o método getParameter(), obtendo os parâmetros do corpo através do fluxo IO será inválido (o teste pessoal retorna "").
Além disso, o método IOUtils.read(reader) de dubbo-2.5.3.jar é usado aqui para ler o conteúdo do corpo da postagem.