java - Java中POST请求体不能包含中文字符

标签 java rest web-services character-encoding

我使用 Hibernate 和 GSON 在 Java 中将数据作为对象检索,并通过 POJO 中的 GSON 创建一个 .toString 方法来生成 JSON 字符串。现在我需要使用此 JSON 作为请求正文来向 Web 服务发送 POST 请求。

问题是,如果 JSON 包含任何中文字符,它将无法工作。它提示中文姓名字段不正确。我检查了一下,中文字符串中没有空格,而其中的 .length() 正是字符数。

我还尝试复制整个 JSON 并将其粘贴到 Postman 以发出 POST 请求。它会起作用的。为什么它在我的 Java 代码中不起作用,但在 Postman 中却起作用?下面是我如何创建 POST 请求。

RequestConfig requestConfig = RequestConfig.custom()
                .setConnectionRequestTimeout(CONNECTION_TIMEOUT)
                .setConnectTimeout(CONNECTION_TIMEOUT)
                .setSocketTimeout(CONNECTION_TIMEOUT)
                .build();
CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();

StringBuilder entity = new StringBuilder();
entity.append(myJsonFromPojo);

HttpPost post = new HttpPost(uri);
        post.addHeader("content-type", "application/json");
        post.addHeader("Content-Type", "charset=UTF-8");
        post.addHeader("Accept", "*/*");
        post.addHeader("Accept-Encoding", "gzip,deflate");
        post.addHeader("Authorization", "Bearer " + token);
        post.setEntity(new StringEntity(entity.toString()));

response = httpClient.execute(post);

最佳答案

设法使用下面的方法来解决我的问题。 post.addHeader("Content-type", "application/json; charset=UTF-8"); post.addHeader("Accept", "application/json");

关于java - Java中POST请求体不能包含中文字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59301720/

相关文章:

Android:调用Web服务时操作超时

java - 如何使用 libgdx 仅触摸屏幕左侧时创建监听器

java - CLIPS 查找所有事实返回值

通过 mysql 数据库进行登录身份验证的 Java gui 不起作用并更改逻辑

用于处理存储在 hbase 中的数据的 REST API

rest - 如何使用不可变资源处理 PUT 端点

java - 如何从Web服务返回自定义对象的数组列表?

java - Web服务上传图片url

java - 如何编写代码来计算数组中特定项的出现次数?

rest - 如何抑制来自 CLI CURL 的请求输出的 header