2017-12-08 7 views
0

발리 요청에 문제가 있습니다. JSONObject param (비밀번호 및 로그인 사용자)과 함께 GET (다른 유사한 POST도) 요청을 보내 사용자와 전체 사용자 데이터를 다시 보냅니다. 내가 mRequestBodyJSON 올바른 디버깅하는 동안 볼 수 있지만 내 컨트롤러를받을 수는 없지만 -JSONObjectParameter가있는 Volley GET JsonObjectRequest가 전혀 작동하지 않습니다.

private void processLogin() throws JSONException { 
    this.user.setLogin(this.loginText.getText().toString()); 
    this.user.setPassword(this.passwordText.getText().toString()); 
    final JSONObject jsonObject = new JSONObject(new Gson().toJson(this.user)); 

    final JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, UrlHelper.loginUrl, jsonObject, new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { 
      user = new Gson().fromJson(response.toString(), User.class); 
      if (user.getUserId().equals(getResources().getString(R.string.ERROR))) { 
       onLoginFailed(); 
      } else { 
       onLoginSuccess(user); 
      } 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.d(TAG, error.toString()); 
     } 
    }) { 
     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> headers = new HashMap<String, String>(); 
      headers.put("Content-Type", "application/json"); 
      return headers; 
     } 
    }; 
    VolleySingleton.getInstance(this).addToRequestQueue(request); 
} 

컨트롤러 방법 :

@RequestMapping(value = "/loginTest", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}) 
public User someMethod(@RequestBody User user) throws SQLException { 
    return userService.authenticateUser(user.getLogin(), user.getPassword()); 
} 

주석 @RequestBody없이 나는 그것을 처리하지만 param의 사용자가 비어있는, 그래서 나는 null password와 login으로 User를 처리한다. 최근에 내가 한거야 StringRequest 제발, 도와주세요. :)

답변

0

HTTP 사양의 일부로 GET 요청에는 본문이 없습니다. GET 요청을 생성하여 본체와 함께 보낼 수는 있지만, GET 메서드 사양에서 본체가 의미 론적 의미가 없으므로 의미가 없습니다. Spring에 대해서는 너무 많이 알지 못하지만 Spring은 GET 메서드이기 때문에 Spring이 요청의 본문을 무시하고있는 것으로 추측됩니다. 신체 내부에 무언가를 넣으려고하는 경우 POST로 요청을 보내고 받아야합니다.

+0

Okey, 그래서 내 메서드를 POST로 변경하고 StringRequest를 사용하여 getBodyContentType() 및 getBody() 메서드를 구현하고 컨트롤러 메서드를 향상시킵니다. 당신의 도움을 주셔서 감사합니다 :) – agataguli