如果 JSON 响应结果为 0/11,我如何将用户发送到 servlet 中的 .html 页面

Posted

技术标签:

【中文标题】如果 JSON 响应结果为 0/11,我如何将用户发送到 servlet 中的 .html 页面【英文标题】:How can I send user to .html page within servlet if JSON response result is 0/11 【发布时间】:2019-06-07 21:33:24 【问题描述】:

假设用户使用正确的凭据登录我的网站,结果

"ticketStatus":"Valid","requestId":"73","result":0,"resultText":"Valid"

"ticketStatus":"Invalid","requestId":"8","result":11,"resultText":"Invalid"

我怎样才能做到这一点,以便我可以检索“有效/无效”或“0/11”,以便将用户发送到 valid.html/invalid.html(其中包含您已成功/未成功登录) . 如果它是“无效”或“11”(任何一个,取决于我可以分配的内容),也是如此。我只是不知道应该如何选择或选择什么才能将其放入 if 语句中。这是我的代码。

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+"\"";

    System.out.println(ticketCheck);

    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());
    








【问题讨论】:

有关相关服务的一些详细信息可能会有所帮助。我的假设是有一个服务可以处理身份验证并为每个身份验证请求生成票号。处理身份验证请求后,用户将被重定向到服务,该服务应根据从身份验证服务检索到的接收票号的详细信息显示有效/无效页面。如果是这种情况,那么在从身份验证服务读取详细信息后(在br.close() 行之后)解析sb 的内容,提取状态并根据状态显示相应的页面 @ValentinCarnu 有一个数据库,我可以将 JSON 字符串发送到其中。我可以使用 Postman 检查列表,当我在运行 servlet 时打开的 html 站点上单击登录时,它会将 JSON 请求发布到 url(在我的代码中的某处),然后它会在其中返回 JSON检查用户输入是否有效(胡言乱语=无效,正确的数据当我在邮递员中进行发布请求时列出的内容(具有正确的名字、票号和姓氏)=有效))。我只是不知道如何解析和提取值。 考虑使用现有库将 json 字符串解析为 java 对象。这种用例有几个库,两个流行的库是Jackson和GSON 是的,谢谢,我发现了如何解析我得到的响应,所以这个问题得到了解决。只有我不知道如何在用户有效登录时为他们提供互联网访问权限。 【参考方案1】:

通过解析响应解决了问题。

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()); //the responsemessage
     else 
        System.out.println(con.getResponseMessage());
    


    String jsonStr = sb.toString();
    JSONObject jsonObj = new JSONObject(jsonStr);
    String ticketstat = jsonObj.getString("ticketStatus"); //get ticketStatus value
    System.out.println(ticketstat);

    if (ticketstat .equals("Invalid")) //code here for w/e you want to do with invalid


    


【讨论】:

以上是关于如果 JSON 响应结果为 0/11,我如何将用户发送到 servlet 中的 .html 页面的主要内容,如果未能解决你的问题,请参考以下文章

如何将 NodeJs 响应转换为嵌套的 json 响应

如何识别 JSON 响应中的特定值

如果 vue js 中的 json 响应中没有数据,如何显示“无数据”?

将 json 转换为石墨烯 graphql 响应

将json转换为石墨烯graphql响应

将async函数的结果保存到全局变量