2017-07-07 3 views
0

私はJAVAでAPIを持っています。Java webservlet API:HTTP 400エラー - 不正リクエスト

<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を取得します。

hcpselect_dataは以下のとおりです。上のコードでは、私はそれを見るために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_isはタイプINTであり、他のすべてのはVARCHARている私のデータベース内のテーブルhcpです。

enter image description here

あなたは私を助けてくださいことはできますか?

+0

log/consoleの例外はありますか? IDEでコードをトレース/デバッグしようとしましたか? –

+0

@JozefChocholacek私は例外がありません。問題は 'Connection conn = this.getDBMySQLCon();'にあるかもしれません。なぜなら、この行の後に何かを印刷すると、私はそれを見ることができないからです。 – zinon

+0

私は 'mySQL'接続を確認しましたが、今は警告があります。私は問題が何であるか分かりません... – zinon

答えて

1

select_hcpサーブレットでは、エラー+スタックトレースをログに記録するには、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; 
} 
+0

ありがとう!ストアドプロシージャで 'hcp_name'が' string'として使われているので、修正は 'preparedStmt.setString(1、String.valueOf(hcp_name))'です。 – zinon

関連する問題