Передача данных в приложение Java (сервлет) в теле запроса GET - PullRequest
2 голосов
/ 02 февраля 2020

Как я могу обрабатывать данные, которые передаются в теле GET-запроса с использованием сервлета?

Я использую небольшой хостинг vServer (netcup), работающий на сервере Ubuntu 18.04 в качестве ОС и Tomcat 9.

Для имитации http-запросов я использую Postman. В приведенном ниже примере кода (это только метод doGET) я реализовал небольшую программу, которая обрабатывает входящие данные «value1» из строки запроса входящего GET-запроса. Когда я пытаюсь передать тот же параметр в теле сообщения, я получаю следующую ошибку:

HTTP Status 500 ? Internal Server Error
Type: Exception Report, Message: null
Description: The server encountered an unexpected condition that prevented   
it from fulfilling it from fulfilling the request


java.lang.NumberFormatException: null
java.lang.Integer.parseInt(Integer.java:542)
java.lang.Integer.parseInt(Integer.java:615)
myServlet1.doGet(myServlet1.java:25)
javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Как мне изменить код, чтобы разрешить передачу через GET-тело? Если я передаю данные с помощью строки запроса (например) "http://localhost: 8080 ...? Value1 = 10 ", то все работает нормально.

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/myServlet1")
public class myServlet1 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public myServlet1() {
        super();
        // TODO Auto-generated constructor stub
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter writer = response.getWriter();

              String value1s= request.getParameter("value1");
              int a=Integer.parseInt(value1s); // 
              a=a+10;

              writer.println("<html>");
                  writer.println("<head><title>Hello World Servlet</title></head>");
                  writer.println("<body>");
                  writer.println("    <h1>Hello value from a Servlet!</h1>");
                  writer.println("<h1>transmitted value: " + a + "</h1>");      
                  writer.println("<body>");
                  writer.println("</html>");
                  writer.close();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);

    }
} 

Я очень благодарен за каждый совет и подсказку!

...