在响应中发送回JSON对象(不是字符串版本)

时间:2017-03-01 19:41:47

标签: javascript java json web-services rest

我正在使用Java开发一个安静的Web服务,我有这个返回有效JSON的方法:

@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getJSON()
{   
    String json = "{\"data\": \"This is my data\"}";
    return Response.ok(json).build();
}   

我遇到的问题是JSON是字符串形式。 我如何以对象形式发回?在我的响应返回时,我无法使用它,因为响应数据将以字符串形式返回

以防万一这是我在javascript端的网络服务电话

//Use of the promise to get the response
let promise = this.responseGet()
promise.then(
    function(response) { //<--- the param response is a string and not an object :(
        console.log("Success!", response);
    }, function(error) {
        console.error("Failed!", error);
    }
);

//Response method    
responseGet() 
{
    return new Promise(function(resolve, reject) {

        let req = new XMLHttpRequest();
        req.open('GET', 'http://localhost:8080/TestWebService/services/test');

        req.onload = function() {
          if (req.status == 200) {
            resolve(req.response);
          }
          else {
            reject(Error(req.statusText));
          }
        };

        req.onerror = function() {
          reject(Error("There was some error....."));
        };

        req.send();
    });
}

3 个答案:

答案 0 :(得分:1)

尝试在MediaType第二个参数中传递ResponseBuilder

@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getJSON()
{   
  String json = "{\"data\": \"This is my data\"}";
  return Response.ok(json, MediaType.APPLICATION_JSON).build();
}  

答案 1 :(得分:0)

@GET
@Produces ("application/json")

如果你用它注释它应该工作。

答案 2 :(得分:0)

您所要做的就是在JavaScript中使用JSON.parse()。

promise.then(
function(response) { 
    response = JSON.parse(response);
    console.log("Success!", response);
}

无论您从后端发送什么,您的responseGet函数都不会返回已解析的对象。