Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将JSON字符串作为POST参数传递,以避免Java中的字符编码?_Java_Json_Post - Fatal编程技术网

如何将JSON字符串作为POST参数传递,以避免Java中的字符编码?

如何将JSON字符串作为POST参数传递,以避免Java中的字符编码?,java,json,post,Java,Json,Post,我正在尝试向我拥有的REST端点发送POST参数。这个参数是一个JSON字符串,它包含特殊的字符,比如双引号(“)。在端点上,我一直对字符串进行编码 这是请求部分: HttpClient client = HttpClientBuilder.create().build(); StringBuilder query = new StringBuilder(); query.append(callBackURL); ArrayList<NameValuePai

我正在尝试向我拥有的REST端点发送POST参数。这个参数是一个JSON字符串,它包含特殊的字符,比如双引号(“)。在端点上,我一直对字符串进行编码

这是请求部分:

    HttpClient client = HttpClientBuilder.create().build();
    StringBuilder query = new StringBuilder();
    query.append(callBackURL);
    ArrayList<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
    urlParameters.add(new BasicNameValuePair("update", "{\"object\":\"page\",\"entry\":[{\"id\":\"316492991876763\",\"time\":1417436403,\"changes\":[{\"field\":\"feed\",\"value\":{\"item\":\"comment\",\"verb\":\"add\",\"comment_id\":\"321528008039928_323256911200371\",\"parent_id\":\"316492991876763_321528008039928\",\"sender_id\":100006737955082,\"created_time\":1417436403}}]}]}"));
    try {
        HttpPost post = new HttpPost(query.toString());
        post.setEntity(new UrlEncodedFormEntity(urlParameters));
        post.addHeader("content-type", "application/json");
        HttpResponse response = null;
        try {
            response = client.execute(post);
        } 
        catch (IOException e) {
            System.out.println(e.getMessage());
        }
    } 
    catch (UnsupportedEncodingException e2) {
        System.out.println(e2.getMessage());
    }
我得到的是这样编码的字符串:

%7B%22object%22%3A%22page%22%2C%22entry%22%3A%5B%7B%22id%22%3A%22316492991876763%22%2C%22time%22%3A1417436403%2C%22changes%22%3A%5B%7B%22field%22%3A%22feed%22%2C%22value%22%3A%7B%22item%22%3A%22comment%22%2C%22verb%22%3A%22add%22%2C%22comment_id%22%3A%22321528008039928_323256911200371%22%2C%22parent_id%22%3A%22316492991876763_321528008039928%22%2C%22sender_id%22%3A100006737955082%2C%22created_time%22%3A1417436403%7D%7D%5D%7D%5D%7D
StringEntity params = new StringEntity(json.toString());
HttpPost post = new HttpPost(query.toString());
有些东西我无法转换为JsonElement

有没有办法避免这种情况

谢谢! 亚历杭德罗

更新:

我发现了问题所在,所以我在这里解释一下,以防有人有同样的问题

我试图使用BasicNameValuePair传递参数,如下所示:

ArrayList<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
    urlParameters.add(new BasicNameValuePair("update", "{\"object\":\"page\",\"entry\":[{\"id\":\"316492991876763\",\"time\":1417436403,\"changes\":[{\"field\":\"feed\",\"value\":{\"item\":\"comment\",\"verb\":\"add\",\"comment_id\":\"321528008039928_323256911200371\",\"parent_id\":\"316492991876763_321528008039928\",\"sender_id\":100006737955082,\"created_time\":1417436403}}]}]}"));

因此,我不需要解码。Mistery仍在解释为什么传递BasicNameValuePair数组会对字符串进行编码…

在要生成JSON的方法上方使用注释

@Produces("application/json")

不要这样做。不要将JSON放在表单参数中。如果有任何问题,请使用多部分请求,并将其中一部分设置为
application/JSON
。在任何情况下,您的服务器都应该足够智能,可以将编码的表单参数解码回其原始字符。然后,您可以将它们与JSON解析器一起使用。@SotiriosDelimanolis这不是来自一个表单,它实际上来自Facebook,但我正在对它进行单元测试,并试图模拟FB的响应,它是一个JSONstring@SotiriosDelimanolis关于解码…有什么指针吗?我很惊讶你的容器没有为你解码。你可以使用
urldecker
。对不起,我不想“生成任何JSON”纽约…我不明白你的意思
@Produces("application/json")