在我的项目中,我将后端和前端模块分开,通过从后端提供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/