java - GSON如何支持多语言(Json和Java Object之间)?

标签 java json gson httprequest

在我的项目中,我将后端和前端模块分开,通过从后端提供REST api来运行,并使用Apache Http Client和GSON来调用它。

我想在 UI(网页)上提供多种语言,例如德语、法语...。

在网页上,它显示为“Schl��ssli Sch��negg, Wilhelmsh��he”,但在数据库和 RestAPI json 中是“Schlössli Schönegg”。

如何支持多语言?

在后端,我编写了像 get、put、post 这样的请求方法,在前端,我使用 HttpClient 和 GSON 将 JSON 与 Java 对象相互转换。

我在html中尝试过,但主要问题是GSON在从JSON()转换时,原始JSON值“”Schlössli Schönegg”变成了“Schl��ssli Sch��negg,Wilhelmsh��he”。

在 RestAPI 中,JSON 数据是

{ “地址ID”:3, "buildingName": "Schlössli Schönegg", “街道”:“威廉高地”, “病房”:“6003”, “区”:“卢塞恩”, "cityOrProvince": "卢塞恩州", “国家”:“瑞士” }

但是在前端,GSON转换后的Java对象字符串数据是

(..buildingName=Schlössli Schönegg、街道=Wilhelmshöhe、病房=6003、区=卢塞恩、cityOrProvince=卢塞恩州、国家/地区=瑞士)

这里,RestClient函数代码

public List<FakeEmployeeDTO> getAllEmployeeList() throws IOException {
    HttpClient client = HttpClientBuilder.create().build();
    HttpGet getRequest = new HttpGet(URL);
    HttpResponse response = client.execute(getRequest);

    Integer statusCode = response.getStatusLine().getStatusCode();
    if (statusCode != 200) {
        throw new SystemException(ERROR_MESSAGE + statusCode);
    }
    BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
    String line = "";
    StringBuilder jsonData = new StringBuilder();
    while ((line = rd.readLine()) != null) {
        jsonData.append(line);
    }
    response.getEntity().getContent().close();
    rd.close();
    logger.info(jsonData.toString());

    Gson gson = new GsonBuilder().setDateFormat("dd-MMM-yyyy").create();
    Type listType = new TypeToken<List<FakeEmployeeDTO>>() {
    }.getType();
    List<FakeEmployeeDTO> employeeList = gson.fromJson(jsonData.toString(), listType);
    sortEmployeeListByFirstName(employeeList);
    return employeeList;
}

在 Employee 内部,我有地址 atrribute ,在该地址内我有诸如buildingNumber和Street之类的值,该值可以是任何语言。

最佳答案

试试这个

(BufferedReader rd = new BufferedReader( new InputStreamReader(response.getEntity().getContent(),
       "UTF-8"));)

整个代码将像这样结束。

public List<FakeEmployeeDTO> getAllEmployeeList() throws IOException {

HttpClient client = HttpClientBuilder.create().build();
HttpGet getRequest = new HttpGet(url);
HttpResponse response = client.execute(getRequest);

Integer statusCode = response.getStatusLine().getStatusCode();
if (statusCode != 200) {
    throw new SystemException(ERROR_MESSAGE + statusCode);
}
BufferedReader rd = new BufferedReader( new InputStreamReader(response.getEntity().getContent(),
    "UTF-8"));  // if it is not working please try with ("ISO-8859-1")
String line = "";
StringBuilder jsonData = new StringBuilder();
while ((line = rd.readLine()) != null) {
    jsonData.append(line);
}
response.getEntity().getContent().close();
rd.close();
logger.info(jsonData.toString());

Gson gson = new GsonBuilder().setDateFormat("dd-MMM-yyyy").create();
Type listType = new TypeToken<List<FakeEmployeeDTO>>() {
}.getType();
List<FakeEmployeeDTO> employeeList = gson.fromJson(jsonData.toString(), listType);
sortEmployeeListByFirstName(employeeList);
return employeeList;}

下次请务必尝试使用此方法,因为您可以使用“尝试使用资源”

try (BufferedReader reader = new BufferedReader(new InputStreamReader(
                    new URL("https://htt.your url.com" + URLEncoder.encode(query, "UTF-8") )
                            .openConnection().getInputStream()))) {

关于java - GSON如何支持多语言(Json和Java Object之间)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57409824/

相关文章:

java8u121无法打开topcoder arena

java - 如何创建不实现 Cloneable 的对象的克隆

javascript - 将平面数组减少为 2 层嵌套 json 对象数组

android - gson.fromJson 对于动态键返回 null

java - 自定义 Gson 序列化器,其字段在运行时未知

java - 在java中读取时跳过文本文件的某些部分

java - Android 社​​交网络应用程序

ruby - 如何在 ruby​​ 中替换 JSON 节点的值?

json - Angular2 ngFor如何统计循环值的个数?

java - Spring MVC - GSON 序列化空值