Отправка запроса JSON / GSON в сервлеты Java приводит к «неправильному запросу» - PullRequest
0 голосов
/ 12 января 2019

У меня есть код сервлета, где я хочу получить действительный ответ. Это оригинальная раскладка запроса

 {
  "function": "Check",
  "teamId": "<teamId>",
  "teamKey": "<teamKey>",
  "requestId": "<request-id>",
  "firstName": "<FirstName>",
  "lastName": "<LastName>",
  "ticketNumber": "<ticket-num>"
}

У меня есть это в моем сервлете в Intellij.

import com.google.gson.*;
import com.google.*;
import org.apache.*;
import org.apache.http.*;



@WebServlet(name = "Logincheck", urlPatterns = {"/Logincheck"})
public class Servlet extends HttpServlet {


String teamID = "IC106-2";
String teamKey = "1b3741ccf6d9ec5245055370125d901e";
String url="http://fys.securidoc.nl:11111/Ticket";
int Min = 1;
int Max = 100;
int REQ_ID =  Min + (int)(Math.random() *((Max - Min)+1));

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//index.html form user input
     String fname = request.getParameter("firstName");
    String lastName = request.getParameter("lname");
    String ticketNummer = request.getParameter("ticketnr");

    JsonParser parser = new JsonParser();

    URL object=new URL(url);

    String ticketCheck = "{\"function:\"Check\",\"teamId\":\"IC106-2\",\"teamKey\":\"1b3741ccf6d9ec5245055370125d901e\",\"requestId\":\""+REQ_ID+"\",\"firstName\":\""+fname+"\",\"lastName\":\""+lastName+"\",\"ticketNumber\":\""+ticketNummer+"\"}";



    HttpURLConnection con = (HttpURLConnection) object.openConnection();
    con.setDoOutput(true);
    con.setDoInput(true);
    con.setRequestProperty("Content-Type", "application/json");
    con.setRequestProperty("Accept", "application/json");
    con.setRequestMethod("POST");

    OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream());
    writer.write(ticketCheck);
    writer.flush();

    StringBuilder sb = new StringBuilder();
    String jsonResponseString = sb.toString();
    JsonElement jsonTree = parser.parse(jsonResponseString);

    int HttpResult = con.getResponseCode();
    if (HttpResult == HttpURLConnection.HTTP_OK) {
        BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"));
        String line;
        while ((line = br.readLine()) != null) {
            sb.append(line + "\n");
        }
        br.close();
        System.out.println("" + sb.toString());
    } else {
        System.out.println(con.getResponseMessage());
    }





}

Теперь, когда я нажимаю «Выполнить», он открывает мой index.html, и когда я нажимаю кнопку входа в систему / Logincheck, он отвечает (в пределах intellij):

Bad Request

Teamkey и TeamID верны на 100%, но я, вероятно, упускаю из виду то, что связано с Json. У меня минимальный опыт работы с Json и сервлетами в целом. Например, я ввожу жестко запрограммированные учетные данные для входа в систему и тикет, или ввод пользователя уже правильный? Я должен ожидать этот ответ:

{
  "ticketStatus": "<ticket-status>",
  "requestId": "<request-id>",
  "result": "<result-code>",
  "resultText": "<result-text>"
}

Ответы [ 2 ]

0 голосов
/ 13 января 2019

решаемая. Простая цитата опечатка. «плохой запрос» означает плохой синтаксис, и я забыл добавить \ »рядом с функцией.

    String ticketCheck = "{\"function\":\"Check\",\"teamId\":\"IC106-2\",\"teamKey\":\"1b3741ccf6d9ec5245055370125d901e\",\"requestId\":\""+REQ_ID+"\",\"firstName\":\""+fname+"\",\"lastName\":\""+lastName+"\",\"ticketNumber\":\""+ticketNummer+"\"}";

правильный JSON выше

0 голосов
/ 12 января 2019

Вы должны записать свои данные json в тело запроса. Для этого вы можете использовать OutputStreamWriter класс для записи в выходной поток HttpURLConnection, как показано ниже:

String ticketCheck = "{ \"function\":\"Check\",\"teamId\":IC106-2,\"teamKey\":1b3741ccf6d9ec5245055370125d901e,\"requestId\":1,\"firstName\":\"" + fname + "\" ,\"lastName\":\""+lastName+"\",\"ticketNumber\":\"\"" + ticketnummer + "\"}";

HttpURLConnection con = (HttpURLConnection) object.openConnection();
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");
con.setRequestMethod("POST");

OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream());
writer.write(ticketCheck);
//this line closes the outputstream and actually makes the http request is sent
writer.flush();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...