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 字符串并且是正确的。

这是我数据库中的 table hcp,其中 hcp_isINT 类型,其他都是 VARCHAR.

你能帮帮我吗?

select_hcp servlet 中,使用 e.printStackTrace() 将错误 + 堆栈跟踪记录到日志中。 Just System.out.println("error"); 只报告有问题,但没有说明 whatwhere 问题所在。

  // ...
} 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;
}