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_is
是 INT
类型,其他都是 VARCHAR
.
你能帮帮我吗?
在 select_hcp
servlet 中,使用 e.printStackTrace()
将错误 + 堆栈跟踪记录到日志中。 Just System.out.println("error");
只报告有问题,但没有说明 what 和 where 问题所在。
// ...
} 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;
}
我在 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_is
是 INT
类型,其他都是 VARCHAR
.
你能帮帮我吗?
在 select_hcp
servlet 中,使用 e.printStackTrace()
将错误 + 堆栈跟踪记录到日志中。 Just System.out.println("error");
只报告有问题,但没有说明 what 和 where 问题所在。
// ...
} 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;
}