java - 为什么我的两个简单的 Spring REST 服务返回两种不同的 JSON 格式,一种是 JSON 对象,另一种是 JSON 字符串?
问题描述
我有两个 Web 服务,CREATE 和 DELETE。它们都工作正常,但 JSON 结果以两种不同的格式返回。一个是字符串,一个是 JSON 对象。
'CREATE' 功能正常工作并正确显示成功消息,就像这样......
var formData = {
dataSourceName:$('#createDS-name').val()
};
var sJSON = JSON.stringify(formData);
$.ajax({
type : "POST",
url : "http://localhost:8080/juliet/json/datasource/create",
data : sJSON,
contentType: "application/json; charset=utf-8",
dataType: "json",
success : function(msg) {
alert("210: msg = "+msg);
alert("215: JSON.stringify(msg) = "+JSON.stringify(msg));
alert("220: JSON.stringify(msg.message) = "+JSON.stringify(msg.message));
$("#successAlert").html("<strong>Success!</strong> "+JSON.stringify(msg.message)+"</div>");
/***/
显示的警报如下所示:
210: msg = [object Object]
215: JSON.stringify(msg) = {"success":true,"message":"successfully created DataSource; id = 21"}
220: JSON.stringify(msg.message) = "successfully created DataSource; id = 21"
'DELETE' 功能也可以工作,就像这样......
$.ajax({
type : "DELETE",
url : "http://localhost:8080/juliet/json/datasource/"+dataSourceId,
contentType: "application/json; charset=utf-8",
success : function(msg) {
alert("110: msg = "+msg);
alert("111: msg.message = "+msg.message);
alert("112: msg.success = "+msg.success);
alert("115: JSON.stringify(msg) = "+JSON.stringify(msg));
alert("120: JSON.stringify(msg.message) = "+JSON.stringify(msg.message));
$("#successAlert").html("<strong>Success:</strong> "+JSON.stringify(msg.message));
/***/
但结果(见下面的第 120 行)显示“未定义”。警报框结果如下所示...
110: msg = {"success":true,"message":"Deleted Data Source id '21'."}
111: msg.message = undefined
112: msg.success = undefined
115: JSON.stringify(msg) = "{\"success\":true,\"message\":\"Deleted Data Source id '21'.\"}"
120: JSON.stringify(msg.message) = undefined
我在 Spring Java 代码中看到的唯一区别是一个使用 RequestMethod.DELETE,另一个使用 RequestMethod.POST。
为什么我看到两个不同的结果?一个是 JSON 字符串,一个是 JSON 对象?
@RequestMapping(value = "/json/datasource/{dataSourceId}", method = RequestMethod.DELETE)
public ResponseEntity<String> deleteDataSource(@PathVariable("dataSourceId") int dataSourceId) throws Exception {
boolean bSuccess = false;
String sRetMsg = "Unknown error.";
try {
this.databaseService.deleteDataSource(dataSourceId);
bSuccess = true;
sRetMsg = "Deleted Data Source id '"+dataSourceId+"'.";
} catch (Exception x) {
bSuccess = false;
sRetMsg = x.getMessage();
}
JSONObject replyObj = new JSONObject();
replyObj.put("success", bSuccess);
replyObj.put("message", sRetMsg);
return new ResponseEntity<String>(replyObj.toJSONString(), (bSuccess) ? HttpStatus.OK : HttpStatus.BAD_REQUEST);
}
@RequestMapping(value = "/json/datasource/create", method = RequestMethod.POST)
public ResponseEntity<String> createDataSource(@RequestBody String json) throws Exception {
boolean bSuccess = false;
String sRetMsg = "Unknown error.";
JSONParser parser = new JSONParser();
JSONObject jo = null;
jo = (JSONObject) parser.parse(json);
String dataSourceName = (String)jo.get("dataSourceName");
if (dataSourceName == null) {
sRetMsg = "Missing required parameter 'dataSourceName'.";
} else
if (dataSourceName != null) {
try {
Integer id = this.databaseService.createDataSource(dataSourceName);
bSuccess = true;
sRetMsg = "successfully created DataSource; id = "+id.toString();
} catch (Exception x) {
bSuccess = false;
sRetMsg = "ERROR: "+x.getMessage();
}
}
JSONObject replyObj = new JSONObject();
replyObj.put("success", bSuccess);
replyObj.put("message", sRetMsg);
return new ResponseEntity<String>(replyObj.toJSONString(), (bSuccess) ? HttpStatus.OK : HttpStatus.BAD_REQUEST);
}
解决方案
推荐阅读
- python-3.x - 如何修复 Python3 中的“呼叫不成功”facebook 营销 api 错误
- python - 如何在 python 中使用 write() 将文档字符串写入文件?
- python - Pandas Dataframe 在添加具有对象 dtype 的行时非常慢
- gridview - 页面更改事件上显示的空数据文本
- r - 无法通过 shinyapps.io 连接到 ODBC
- c# - 如何在单个连接中使用 2 个数据源
- node.js - “npm start”启动时出错
- javascript - node-imap,邮件事件在收到多封电子邮件时不起作用
- c# - SqlDataReader.ExecuteReader(); 即使提供了所有参数,也返回空对象
- angular - Angular 7:从后端添加路由链接