Parameters 如何使用HttpPost传递类似对象的参数

Parameters 如何使用HttpPost传递类似对象的参数,parameters,http-post,apache-httpcomponents,Parameters,Http Post,Apache Httpcomponents,我使用的RESTfull Web服务具有以下方法: @RequestMapping(value = "/rest/secure/Userprofile/{providerId}", method = RequestMethod.POST) @ResponseBody public List<Userprofile> addUserprofile(@RequestBody Object[] socialAccounts, @PathVariable String providerId

我使用的RESTfull Web服务具有以下方法:

@RequestMapping(value = "/rest/secure/Userprofile/{providerId}", method = RequestMethod.POST)
@ResponseBody 
public List<Userprofile> addUserprofile(@RequestBody Object[] socialAccounts, @PathVariable String providerId, HttpServletRequest request, HttpServletResponse response) {
       System.out.println("do something!!!");
}
@RequestMapping(value=“/rest/secure/Userprofile/{providerId}”,method=RequestMethod.POST)
@应答器
公共列表addUserprofile(@RequestBody Object[]socialAccounts、@PathVariable String providerId、HttpServletRequest请求、HttpServletResponse响应){
System.out.println(“做点什么!!!”;
}
我要传递socialAccount对象

    String json = "{\"id\":\"26651480000\",\"selected\":true,\"category\":\"Software\",\"perms\":[\"ADMINISTER\",\"EDIT_PROFILE\",\"CREATE_CONTENT\",\"MODERATE_CONTENT\",\"CREATE_ADS\",\"BASIC_ADMIN\"],\"provideruserid\":\"1475334273\",\"name\":\"Eran\",\"useraccesstoken\":\"CAABletmsJHgBANXAhAlaQXVN1TrI5Tq8gvU002Ke8ZB2dcAhoo21u8orrHiT77G3cm6CmJ4zBX2mu8koeq\",\"checked\":false,\"access_token\":\"CAAB0000wcuq8O\"}";

    CloseableHttpClient httpclient = HttpClients.createDefault();
    URIBuilder builder = new URIBuilder();
    builder.setScheme("http").setHost("localhost:8080/AppDev")
    .setPath("/rest/secure/Userprofile/facebook/");
    URI uri = builder.build();

    HttpPost httppost = new HttpPost(uri);
    ArrayList<NameValuePair> postParameters;
    postParameters = new ArrayList<NameValuePair>();
    postParameters.add(new BasicNameValuePair("socialAccounts", json));
    httppost.setEntity(new UrlEncodedFormEntity(postParameters));       
    httppost.setHeader("X-Auth-Token", userLogged.getToken());
    httppost.addHeader("Content-Type", "application/json;charset=UTF-8");
    CloseableHttpResponse response = httpclient.execute(httppost);
String json=“{\'id\”:\“26651480000\”,“selected\”:true,“category\”:“Software\”,“perms\”:[“administrate\”,“EDIT\u PROFILE\”,“CREATE\u CONTENT\”,“CREATE\u CONTENT\”,“CREATE\u ADS\”,“BASIC\u ADMIN\”,“provideruserid\”:“1475334273\”,“name\:“Eran\”,“useraccesstoken\”,“useraccesstoken\:”CAABLETMSJHGBANXAHALAQVN1TRI5TQ8GVU002KE8ZB2DCHOO21U8RHERIT77G3CM6CMJ4ZBX2MU8KOEQ\,“已检查”:false,“访问令牌”:“CAAB000WCUQ8O\”;
CloseableHttpClient httpclient=HttpClients.createDefault();
URIBuilder=新的URIBuilder();
builder.setScheme(“http”).setHost(“localhost:8080/AppDev”)
.setPath(“/rest/secure/Userprofile/facebook/”;
URI=builder.build();
HttpPost HttpPost=新的HttpPost(uri);
ArrayList后参数;
postParameters=新的ArrayList();
add(新的BasicNameValuePair(“socialAccounts”,json));
setEntity(新的UrlEncodedFormEntity(后参数));
setHeader(“X-Auth-Token”,userLogged.getToken());
addHeader(“内容类型”,“应用程序/json;字符集=UTF-8”);
CloseableHttpResponse response=httpclient.execute(httppost);
我明白了:HTTP/1.1400错误请求


有什么建议吗?

我不能评论,所以我不得不把这个作为答案。 也不确定这是否能解决你的问题 但实际上,您应该替换呼叫:

CloseableHttpResponse response = httpclient.execute(httpget);

这很有效

CloseableHttpClient httpclient = HttpClients.createDefault();
        URIBuilder builder = new URIBuilder();
        builder.setScheme("http").setHost("localhost:8080/AppDev")
        .setPath("/rest/secure/Userprofile/facebook/");
        URI uri;
        try {
            uri = builder.build();

            HttpPost http = new HttpPost(uri);
            http.setHeader("X-Auth-Token", userLogged.getToken());
            http.addHeader("content-type", "application/json");

            String json = "[{\"category\":\"Public figure\",\"category_list\":[{\"id\":\"1756452480085\",\"name\":\"Catholic Church\"}],\"name\":\"Pope Francesco fans\",\"access_token\":\"token1\",\"perms\":[\"ADMINISTER\",\"EDIT_PROFILE\",\"CREATE_CONTENT\",\"MODERATE_CONTENT\",\"CREATE_ADS\",\"BASIC_ADMIN\"],\"id\":\"346277202148996\",\"checked\":false,\"selected\":true,\"provideruserid\":\"1475334273\",\"useraccesstoken\":\"usertoken\"},{\"category\":\"Shopping/retail\",\"category_list\":[{\"id\":\"2006019953504\",\"name\":\"Shopping & Retail\"}],\"name\":\"fanpage\",\"access_token\":\"token2\",\"perms\":[\"ADMINISTER\",\"EDIT_PROFILE\",\"CREATE_CONTENT\",\"MODERATE_CONTENT\",\"CREATE_ADS\",\"BASIC_ADMIN\"],\"id\":\"535193443194952\",\"checked\":false,\"selected\":true,\"provideruserid\":\"1475334273\",\"useraccesstoken\":\"usertoken2\"}]";

            StringEntity params = new StringEntity(json);
            http.setEntity(params);
            CloseableHttpResponse response = httpclient.execute(http);

            try {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    String json1 = EntityUtils.toString(entity);

                    System.out.println(json1);
                }
            } finally {
                response.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

您应该指定
内容类型
头,以便端点知道如何解码请求的内容(我认为这不是答案,只是一个提示)
CloseableHttpClient httpclient = HttpClients.createDefault();
        URIBuilder builder = new URIBuilder();
        builder.setScheme("http").setHost("localhost:8080/AppDev")
        .setPath("/rest/secure/Userprofile/facebook/");
        URI uri;
        try {
            uri = builder.build();

            HttpPost http = new HttpPost(uri);
            http.setHeader("X-Auth-Token", userLogged.getToken());
            http.addHeader("content-type", "application/json");

            String json = "[{\"category\":\"Public figure\",\"category_list\":[{\"id\":\"1756452480085\",\"name\":\"Catholic Church\"}],\"name\":\"Pope Francesco fans\",\"access_token\":\"token1\",\"perms\":[\"ADMINISTER\",\"EDIT_PROFILE\",\"CREATE_CONTENT\",\"MODERATE_CONTENT\",\"CREATE_ADS\",\"BASIC_ADMIN\"],\"id\":\"346277202148996\",\"checked\":false,\"selected\":true,\"provideruserid\":\"1475334273\",\"useraccesstoken\":\"usertoken\"},{\"category\":\"Shopping/retail\",\"category_list\":[{\"id\":\"2006019953504\",\"name\":\"Shopping & Retail\"}],\"name\":\"fanpage\",\"access_token\":\"token2\",\"perms\":[\"ADMINISTER\",\"EDIT_PROFILE\",\"CREATE_CONTENT\",\"MODERATE_CONTENT\",\"CREATE_ADS\",\"BASIC_ADMIN\"],\"id\":\"535193443194952\",\"checked\":false,\"selected\":true,\"provideruserid\":\"1475334273\",\"useraccesstoken\":\"usertoken2\"}]";

            StringEntity params = new StringEntity(json);
            http.setEntity(params);
            CloseableHttpResponse response = httpclient.execute(http);

            try {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    String json1 = EntityUtils.toString(entity);

                    System.out.println(json1);
                }
            } finally {
                response.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }