Почему мои две простые Spring REST-службы возвращают два разных формата JSON, один из которых является JSON объектом, а другой - JSON строкой? - PullRequest
1 голос
/ 26 апреля 2020

У меня есть два веб-сервиса, 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);        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...