使用 RestTemplate 时无法在 LinkedHashMap 中接收带有字符串的 UTF-8 格式
Cannot Receive UTF-8 format with String in LinkedHashMap when using RestTemplate
所以当使用restTemplate 发送数据从restclient 接收数据时,我遇到了字符编码问题。这是我的示例代码:
这是我的客户端代码;我已经收到 UTF-8 编码的数据:
rest.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
Map<String,Object> params = new HashMap<String,Object>();
params.put("modelname","character without utf-8");
MyModel oldModel = rest.postForObject(MYMODEL_SERVICE_URI + "/get", params, MyModel.class);//it return perfect model with utf-8 encoded
oldModel.setContent("Tôi muốn cập nhật model này với định dạng UTF-8");
MyModelWrapper wrapper = new MyModelWrapper();
wrapper.add(oldModel);
params.put("newmodel", wrapper);
Message message = rest.postForObject(MYMODEL_SERVICE_URI + "/update", params, Message.class);//class message contains the message back and the status of that message in boolean
System.out.println(message);
这是我的服务代码
@RequestMapping(value="/update", method=RequestMethod.POST)
@ResponseBody
public Message update(@RequestBody Map<String, Object> params){
.....
LinkedHashMap<String,Object> map = (LinkedHashMap<String,Object>params.get("newmodel");
Iterator<String> iter = map.keySet().iterator();
String key = "";
while(iter.hasNext()){
key = iter.next();
System.out.println(map.get(key));//returned the string value is not in utf-8 format
//some method casting linkedhashmap to MyModel
}
....
return message;
}
并且它的return消息不是utf-8编码。所以我需要有关从 rest-client 接收对象时编码的帮助。
将 consumes
、produces
添加到 @RequestMapping
和 application/json;charset=UTF-8
并查看
@RequestMapping(value="/update", method=RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_UTF8, produces=MediaType.APPLICATION_JSON_UTF8)
所以当使用restTemplate 发送数据从restclient 接收数据时,我遇到了字符编码问题。这是我的示例代码:
这是我的客户端代码;我已经收到 UTF-8 编码的数据:
rest.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
Map<String,Object> params = new HashMap<String,Object>();
params.put("modelname","character without utf-8");
MyModel oldModel = rest.postForObject(MYMODEL_SERVICE_URI + "/get", params, MyModel.class);//it return perfect model with utf-8 encoded
oldModel.setContent("Tôi muốn cập nhật model này với định dạng UTF-8");
MyModelWrapper wrapper = new MyModelWrapper();
wrapper.add(oldModel);
params.put("newmodel", wrapper);
Message message = rest.postForObject(MYMODEL_SERVICE_URI + "/update", params, Message.class);//class message contains the message back and the status of that message in boolean
System.out.println(message);
这是我的服务代码
@RequestMapping(value="/update", method=RequestMethod.POST)
@ResponseBody
public Message update(@RequestBody Map<String, Object> params){
.....
LinkedHashMap<String,Object> map = (LinkedHashMap<String,Object>params.get("newmodel");
Iterator<String> iter = map.keySet().iterator();
String key = "";
while(iter.hasNext()){
key = iter.next();
System.out.println(map.get(key));//returned the string value is not in utf-8 format
//some method casting linkedhashmap to MyModel
}
....
return message;
}
并且它的return消息不是utf-8编码。所以我需要有关从 rest-client 接收对象时编码的帮助。
将 consumes
、produces
添加到 @RequestMapping
和 application/json;charset=UTF-8
并查看
@RequestMapping(value="/update", method=RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_UTF8, produces=MediaType.APPLICATION_JSON_UTF8)