使用JSONObjectParameter的Volley GET JsonObjectRequest并不适用于

时间:2017-12-08 09:16:08

标签: java android json controller android-volley

我遇到了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做到的,请帮助我。 :)

1 个答案:

答案 0 :(得分:0)

作为HTTP规范的一部分,GET请求没有正文。您可以使用正文创建和发送GET请求,但这没有任何意义,因为正文在GET方法规范中没有语义含义。我不太了解Spring,但我的猜测是Spring可能忽略了请求的主体,因为它是一个GET方法。如果您打算将某些东西放入体内,您应该发送和接收POST请求。