首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将JSON字符串作为POST参数传递,以避免Java中的字符编码?

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

Stack Overflow用户
提问于 2014-12-03 17:13:03
回答 1查看 627关注 0票数 0

我正在尝试将POST param发送到我拥有的REST端点。这个param是一个JSON字符串,包含像双引号(")这样的特殊字符。

THis是请求部分:

代码语言:javascript
复制
    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());
    }

现在在端点部分:

代码语言:javascript
复制
/**
 * Callback method that receives FB updates
 * @return 200 OK if everything goes OK, 401 ERROR otherwise
 */
@POST
@Path("/callback")
@Consumes(MediaType.APPLICATION_JSON)
public Response facebookUpdate(String update, @Context HttpServletRequest request, @Context HttpServletResponse response) throws ServletException, IOException{
    JsonParser jsonParser = new JsonParser();
    //parse it
    JsonElement json = jsonParser.parse(update);
    ...
}

我得到的是这样编码的字符串:

代码语言:javascript
复制
%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

一些我不能转换成JsonElement的东西..。

有什么办法避免这种情况吗?

谢谢!亚历杭德罗

更新:

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

我试图使用BasicNameValuePair传递一个param,如下所示:

代码语言:javascript
复制
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}}]}]}"));

我已经更改为一个简单的StringEntity,如下所示:

代码语言:javascript
复制
StringEntity params = new StringEntity(json.toString());
HttpPost post = new HttpPost(query.toString());

因此,我不需要破译。迷思仍然存在于为什么传递一个BasicNameValuePair数组将编码字符串..。

EN

回答 1

Stack Overflow用户

发布于 2014-12-03 18:19:30

使用上面的注释,您希望从以下方法生成JSON

代码语言:javascript
复制
@Produces("application/json")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27277667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档