У меня есть два веб-сервиса, 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"
Функция «УДАЛИТЬ» также работает, например, так ...
$.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);
}