簡體   English   中英

Java WebServlet API:HTTP 400錯誤-錯誤的請求

[英]Java webservlet API: HTTP 400 error - bad request

我在JAVA中有一個API。

這是我稱之為的表格:

<form action="select_hcp" method="POST">
   <div>
      <textarea rows="4" cols="100" name="data"></textarea>
   </div>
   <div>
      <input type="submit" class="btn btn-info" value="select_hcp" />
   </div>
</form>

這是我的API Webservlet的代碼。

@WebServlet("/select_hcp")

public class select_hcp extends CEFCYServlet {
    private static final long serialVersionUID = 1L;

    public select_hcp() {
        super();
    }

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

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

        HashMap<String, String> jsonData;
        // If there was a problem parsing the JSON data
        try {
            if ((jsonData = parseSTJSON(getJSONString(request), response)) == null) {
                return;
            }
            // Get data from json
            String hcp_name = jsonData.get("hcp_name");
            System.out.println(hcp_name);
            // insert data to db
            JSONObject jObj = new select_data().hcp(hcp_name);
            // Auditing
            // Set the success message with the results
            setSuccessMessage(response, jObj);
        } catch (Exception e) {
            System.out.println("error");
            setErrorMessage(response, 400, "Bad Request", "Could not select data. Check the data given as input.");
            return;
        }

    }
}

當轉到JSONObject jObj = new select_data().hcp(hcp_name); 我收到http 400 error: Bad request

select_data中的hcp方法是下面的方法。 在上面的代碼中,我import dbmodule.select_data; 為了看到它。

public JSONObject hcp(String hcp_name) {
        JSONObject obj = null;
        Connection conn = this.getDBMySQLCon();
        ResultSet rs = null;
        String queryString = "{CALL select_hcp(?)}";
        PreparedStatement preparedStmt = null;
        try {
            preparedStmt = conn.prepareCall(queryString);
            preparedStmt.setInt(1, Integer.valueOf(hcp_name));

            boolean results = preparedStmt.execute();
            int rowsAffected = 0;
            // Protects against lack of SET NOCOUNT in stored procedure
            while (results || rowsAffected != -1) {
                if (results) {
                    rs = preparedStmt.getResultSet();
                    break;
                } else {
                    rowsAffected = preparedStmt.getUpdateCount();
                }
                results = preparedStmt.getMoreResults();
            }
            int i = 0;
            obj = new JSONObject();
            while (rs.next()) {
                JSONObject nested_obj = new JSONObject();
                nested_obj.put("hp_name_or_legal_org", rs.getString("hp_name_or_legal_org"));
                nested_obj.put("telephone_no", rs.getString("telephone_no"));
                nested_obj.put("email", rs.getString("email"));
                nested_obj.put("hcp_id", rs.getString("hcp_id"));
                obj.put("hcp" + i, nested_obj);
                i++;
            }
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
        return (obj != null) ? obj : null;
    }

CALL select_hcp(?)是mysql數據庫中的存儲過程。 當我在phpmyadmin中運行此過程時,它可以正常工作。 問題出在我的Java代碼中。 我仔細檢查了輸入的json字符串,它是正確的。

這是我數據庫中的hcp表,其中hcp_isINT類型,其他所有都是VARCHAR

在此處輸入圖片說明

你能幫我嗎?

select_hcp servlet中,使用e.printStackTrace()將錯誤+堆棧跟蹤記錄到日志中。 只是System.out.println("error"); 只報告有問題,但並沒有說什么其中的問題是什么。

  // ...
} catch (Exception e) {
    e.printStackTrace(); // instead of System.out.println("error");
    setErrorMessage(response, 400, "Bad Request", "Could not select data. Check the data given as input.");
    return;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM