我在后端使用Spring MVC,前端使用BootstrapjQuery。
我的WebController的REST Web服务与UserService对话,做一些事情,并返回一个包含字符串的Messages对象。
问题是,当JSON返回到浏览器时,它有额外的\字符在里面......
举个例子。
{"readyState":4,"responseText":"{\"success\":false,\"messages\":\"{\\\"error\\\":\\\"Error modifying the user.\\\"}\"}" ...
经过搜索,看起来可能是嵌套的JSON数据导致了这个问题?
我是这样构建的......。
import com.fasterxml.jackson.databind.ObjectMapper;
public String toJSON() {
String sRet = "";
Map<String,String> messages = new HashMap<String,String>();
messages.put("error", "Error modifying the user.");
ObjectMapper mapper = new ObjectMapper();
try {
sRet = mapper.writeValueAsString(messages);
} catch (Exception x) {
// ...
}
return sRet;
}
然后像这样返回给浏览器......。
@RequestMapping(value = "/json/user", method = RequestMethod.POST)
public ResponseEntity<String> modifyUser(@RequestBody String json) throws Exception {
boolean bSuccess = true;
/* ... do the modify user stuff which builds a Messages object, and sets bSuccess = false if there's an error ... */
JSONObject replyObj = new JSONObject();
replyObj.put("success", bSuccess);
replyObj.put("messages", messages.toJSON());
return new ResponseEntity<String>(replyObj.toJSONString(), (bSuccess) ? HttpStatus.OK : HttpStatus.BAD_REQUEST);
}
正确的构建JSONObject的方法是什么,使它没有多余的斜杠?
就个人而言,我总是使用 GSON 当在java中处理JSON时,你的问题与嵌套JSON有关。
你是对的,你的问题与嵌套JSON有关,你在消息中添加了一个包含""的字符串,它逃逸了这些,因为它认为你想要这样的字面字符串。它不知道它也是一个对象。
你有没有试过只做这个?
replyObj.put("messages", messages);