2017-12-08 2 views
0

Ich habe ein Problem mit Volley-Anfrage - Ich möchte GET (auch eine andere ähnliche POST) Anfrage mit JSONObject param (Benutzer mit Passwort und Login) zu autorisieren Benutzer und Senden Sie die vollständigen Benutzerdaten zurück. Obwohl ich bei der Fehlersuche sehen, die mRequestBody richtig JSON ist, aber ich kann es von meinem Controller nicht empfangen -Volle GET JsonObjectRequest mit JSONObjectParameter funktioniert überhaupt nicht

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); 
} 

Controller-Methode:

@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()); 
} 

Ohne Anmerkung @RequestBody ich es Prozess, aber Benutzer in param leer ist, also verarbeite ich User mit null Passwort und login. Kürzlich habe ich es durch StringRequest Bitte, hilf mir. :)

Antwort

0

Als Teil der HTTP-Spezifikationen haben GET-Anfragen keinen Körper. Sie können jedoch GET-Anforderungen mit einem Textkörper erstellen und senden, aber das ist bedeutungslos, da der Textkörper in der GET-Methodenspezifikation keine semantische Bedeutung hat. Ich weiß nicht viel über Spring, aber ich vermute, dass Spring den Hauptteil der Anfrage ignoriert, weil es eine GET-Methode ist. Sie sollten die Anfrage als POST senden und empfangen, wenn Sie etwas in den Körper legen möchten.

+0

Okey, also ändere ich meine Methode zu POST, benutze StringRequest und implementiere getBodyContentType() und getBody() Methoden dafür und ich verbessere meine Controller Methode. Danke für Ihre Hilfe :) – agataguli

Verwandte Themen