【问题标题】:Android spring mobile rest template post request resulted in 400 (bad request) invoking error handlerAndroid spring mobile rest模板发布请求导致400(错误请求)调用错误处理程序
【发布时间】:2014-11-20 13:58:34
【问题描述】:

我正在尝试从 Android 到 Spring MVC Web 服务的简单帖子,但我得到了 对 URL 的发布请求导致 400(错误请求):调用错误处理程序 org.springframework.web.client.HttpClientErrorException: 400 Bad Request

这是我的安卓代码:

protected String doInBackground(MediaType... params) {

    try{

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        HttpEntity<?> requestEntity = new HttpEntity<Object>(postObject, headers);
        RestTemplate restTemplate = new GzipJsonRestTemplate();

        ResponseEntity<String> response = restTemplate.exchange(uri, HttpMethod.POST, requestEntity, String.class);

        return response.getBody().toString();

    }catch(Exception exp) {
        fail = true;
        exp.printStackTrace();
        return null;
    }
}

这是我的控制器:

// New user registration
@RequestMapping(value  = "/register", method = RequestMethod.POST, headers = "Content-Type=application/json")
public @ResponseBody Response register(@RequestBody User myNewUser) {

    // TODO Check if user exists
    Response response;

    // Create new user
    userService.addUser(myNewUser);

    // Set response
    response = new Response();
    response.setResponseCode("0");
    response.setMessage("success");
    response.setContent(null);

    return response;
}

可能是什么问题?

【问题讨论】:

    标签: java android spring-mvc resttemplate


    【解决方案1】:

    用我的课来

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.UnknownHostException;
    import java.util.Map;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.content.Context;
    import android.os.AsyncTask;
    import android.widget.Toast;
    
    import com.ideal.assessmentapp_guj.utils.Applog;
    
    public class Controller {
    
        public static final String ERROR_UNKNOWN = "UNKNOWN_ERROR";
    
        public static final String PARAMS_NAME = "params";
    
        private Map<String, String> map;
        private String jsonString;
        private Context activity;
        private AsyncTaskCompleteListener listener;
    
        Exception exception;
    
        private int requestCode;
        private String key;
    
        /**
         * 
         * @param mContext
         * @param map
         * 
         *            this constractor for only uploading data in background without
         *            showing any progress
         */
        public Controller(Context mContext, Map<String, String> map,
                AsyncTaskCompleteListener listener) {
            if (IdealUtils.isNetworkAvailable(mContext)) {
                this.map = map;
                this.activity = mContext;
                this.listener = listener;
    
                AsyncHttpRequest request = new AsyncHttpRequest();
                request.executeOnExecutor(AsyncHttpRequest.THREAD_POOL_EXECUTOR,
                        map.get("url"));
    
            } else {
                try {
                    if (activity != null)
                        Toast.makeText(
                                activity,
                                "Network Error – the application cannot connect to the internet. Please check your network connection.",
                                Toast.LENGTH_SHORT).show();
                } catch (Exception e) {
    
                }
            }
        }
    
        public Controller(Activity con, Map<String, String> map,
                AsyncTaskCompleteListener listener) {
            this.map = map;
            this.activity = con;
            this.listener = listener;
            // is Internet Connection Available...
            if (IdealUtils.isNetworkAvailable(activity)) {
                AsyncHttpRequest request = new AsyncHttpRequest();
                request.executeOnExecutor(AsyncHttpRequest.THREAD_POOL_EXECUTOR,
                        map.get("url"));
                // request.execute(map.get("url"));
            } else {
                Toast.makeText(
                        activity,
                        "Network Error – the application cannot connect to the internet. Please check your network connection.",
                        Toast.LENGTH_SHORT).show();
                listener.onTaskCompleted(null, 0);
            }
    
        }
    
        public Controller(Activity con, Map<String, String> map) {
            this.map = map;
            this.activity = con;
            listener = (AsyncTaskCompleteListener) activity;
            // is Internet Connection Available...
            if (IdealUtils.isNetworkAvailable(activity)) {
                AsyncHttpRequest request = new AsyncHttpRequest();
                request.executeOnExecutor(AsyncHttpRequest.THREAD_POOL_EXECUTOR,
                        map.get("url"));
                // request.execute(map.get("url"));
            } else {
                Toast.makeText(
                        activity,
                        "Network Error – the application cannot connect to the internet. Please check your network connection.",
                        Toast.LENGTH_SHORT).show();
                listener.onTaskCompleted(null, 0);
            }
    
        }
    
        public Controller(Activity con, Map<String, String> map, int requestID) {
            this.map = map;
            this.activity = con;
            this.requestCode = requestID;
            listener = (AsyncTaskCompleteListener) activity;
            if (IdealUtils.isNetworkAvailable(activity)) {
                // new AsyncHttpRequest().execute(map.get("url"));
                AsyncHttpRequest request = new AsyncHttpRequest();
                request.executeOnExecutor(AsyncHttpRequest.THREAD_POOL_EXECUTOR,
                        map.get("url"));
            } else {
                Toast.makeText(
                        activity,
                        "Network Error – the application cannot connect to the internet. Please check your network connection.",
                        Toast.LENGTH_SHORT).show();
                listener.onTaskCompleted(null, requestID);
            }
    
        }
    
        public Controller(Activity con, Map<String, String> map, int requestID,
                String jsonString) {
            this.map = map;
            this.jsonString = jsonString;
            this.activity = con;
            this.requestCode = requestID;
            listener = (AsyncTaskCompleteListener) activity;
            if (IdealUtils.isNetworkAvailable(activity)) {
                // new AsyncHttpRequest().execute(map.get("url"));
                AsyncHttpRequest request = new AsyncHttpRequest();
                request.executeOnExecutor(AsyncHttpRequest.THREAD_POOL_EXECUTOR,
                        map.get("url"));
            } else {
                Toast.makeText(
                        activity,
                        "Network Error – the application cannot connect to the internet. Please check your network connection.",
                        Toast.LENGTH_SHORT).show();
                listener.onTaskCompleted(null, requestID);
            }
    
        }
    
        public Controller(Activity con, String json, String url, int requestID) {
            this.activity = con;
            this.requestCode = requestID;
            listener = (AsyncTaskCompleteListener) activity;
            this.jsonString = json;
            if (IdealUtils.isNetworkAvailable(activity)) {
                new AsyncHttpRequest().execute(url);
            } else {
                Toast.makeText(
                        activity,
                        "Network Error – the application cannot connect to the internet. Please check your network connection.",
                        Toast.LENGTH_SHORT).show();
                listener.onTaskCompleted(null, requestID);
            }
    
        }
    
        class AsyncHttpRequest extends AsyncTask<String, Void, String> {
            ProgressDialog pDialog;
    
            @Override
            protected void onPreExecute() {
            }
    
            @Override
            protected String doInBackground(String... urls) {
                String params = "obj";
                if (map != null) {
                    map.remove("url");
                    params = map.get(PARAMS_NAME);
                    map.remove(PARAMS_NAME);
    
                    if (params == null) {
                        params = "obj";
                    }
                }
    
                HttpPost httppost = new HttpPost(urls[0]);
                try {
    
                    HttpClient httpclient = new DefaultHttpClient();
    
                    JSONObject jsonObject = new JSONObject();
    
                    if (map != null) {
                        for (String key : map.keySet()) {
                            System.out.println(key + "  < === >  " + map.get(key));
    
                            try {
                                jsonObject.put(key, map.put(key, map.get(key)));
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                    Applog.Log("json object", "jsonObject:" + jsonObject);
    
                    // httppost.setHeader("Content-Type", "application/json");
                    // httppost.setHeader("Accept", "application/json");
    
                    httppost.addHeader("Accept", "application/json");
                    httppost.addHeader("Content-type", "application/json");
    
                    if (jsonString == null) {
    
                        // httppost.setHeader("Content-Type", "application/json");
                        // httppost.setHeader("Accept", "application/json");
                        StringEntity se;
                        se = new StringEntity(
                                "{\""
                                        + params
                                        + "\":"
                                        + (map != null ? jsonObject.toString()
                                                : jsonString) + "}");
                        // se.setContentEncoding("UTF-8");
                        Applog.Log(
                                "Post Data",
                                "{\""
                                        + params
                                        + "\":"
                                        + (map != null ? jsonObject.toString()
                                                : jsonString) + "}");
                        httppost.setEntity(se);
                    } else {
    
                        Applog.Log("Controller", "Send Json as object");
    
                        StringEntity se;
                        se = new StringEntity(jsonString);
                        // se.setContentEncoding("UTF-8");
                        Applog.Log("Post Data",
                                "{\"obj\":"
                                        + (map != null ? jsonObject.toString()
                                                : jsonString) + "}");
                        httppost.setEntity(se);
                    }
    
                    HttpResponse response = httpclient.execute(httppost);
    
                    BufferedReader inBuffer = new BufferedReader(
                            new InputStreamReader(response.getEntity().getContent()));
    
                    StringBuffer stringBuffer = new StringBuffer("");
                    String line = "";
                    String newLine = System.getProperty("line.separator");
                    while ((line = inBuffer.readLine()) != null) {
                        stringBuffer.append(line + newLine);
                    }
                    inBuffer.close();
    
                    // for (int i = 0; i < response.getAllHeaders().length; i++) {
                    // Applog.Log("HEADERS",
                    // "Response ::" + response.getAllHeaders()[i]);
                    // }
    
                    // Applog.Log("RESPONSE PARAMS", response.getStatusLine()
                    // .getStatusCode() + "");
    
                    String result = stringBuffer.toString();
    
                    // Applog.Log("Getting Result", "Result ::" + result);
    
                    return result;
    
                    // HttpResponse response = httpclient.execute(httppost);
                    //
                    // String responseBody = EntityUtils
                    // .toString(response.getEntity());
    
                    // return responseBody;
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                    exception = e;
                    // return ERROR_UNKNOWN;
                } catch (ClientProtocolException e) {
                    exception = e;
                    e.printStackTrace();
                    // return ERROR_UNKNOWN;
                } catch (IOException e) {
                    exception = e;
                    e.printStackTrace();
                    // return ERROR_UNKNOWN;
                } catch (Exception e) {
                    exception = e;
                    e.printStackTrace();
                    // return ERROR_UNKNOWN;
                }
    
                return null;
    
            }
    
            @Override
            protected void onPostExecute(String result) {
                // if (null != pDialog && pDialog.isShowing()) {
                // pDialog.dismiss();
                // }
                // if (result != null) {
                if (listener != null) {
                    listener.onTaskCompleted(result, requestCode);
                    if (exception != null) {
                        listener.OnErrorFired(exception);
                    }
                }
                // }
                super.onPostExecute(result);
            }
        }
    
    }
    

    如何使用

        Map<String, String> map = new HashMap<String, String>();
        map.put("url", Urls.API_BACK_UP);
        map.put("UserID", userID + "");
        map.put("ProductID", 14 + "");
        map.put("DeviceID", devideID);
        map.put("TableName", TABLE_NAME_RESULT_MASTER);
        map.put("BackIdentity", backRestoreIdentity + "");
        map.put("TableData", uploadData);
        new Controller(UtilityActivity.this, map, RESULTMASTER_UPLOAD_DONE);
    

    还有两个三个承包商可用。直接发送json对象使用

    Map<String, String> map = new HashMap<String, String>();
                map.put("url", getLoginUrl());
    
                JSONObject jsonObject = new JSONObject();
                try {
                    jsonObject.put("UserName", username);
                    jsonObject.put("Password", password);
                    new Controller(this, map, 10, jsonObject.toString());
                } catch (Exception e) {
                    e.printStackTrace();
                }
    

    希望对您有所帮助...!

    【讨论】:

    • 感谢您的回复。但我正在尝试将 spring 用于 android resttemplate,它允许我将对象发布到 Spring MVC Web 服务。
    • 请查看他们提供的最佳教程here
    猜你喜欢
    • 1970-01-01
    • 2017-08-19
    • 2021-03-31
    • 1970-01-01
    • 2018-11-06
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多