我遇到了Volley请求的问题 - 我想用JSONObject
param(用户有密码和登录)发送GET(另一个类似的POST)请求来授权用户并发回完整的用户数据。虽然我在调试期间可以看到mRequestBody
是正确的JSON
但是我的控制器无法接收它 -
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密码和登录处理User。最近我是StringRequest
做到的,请帮助我。 :)
答案 0 :(得分:0)
作为HTTP规范的一部分,GET请求没有正文。您可以使用正文创建和发送GET请求,但这没有任何意义,因为正文在GET方法规范中没有语义含义。我不太了解Spring,但我的猜测是Spring可能忽略了请求的主体,因为它是一个GET方法。如果您打算将某些东西放入体内,您应该发送和接收POST请求。