如何将原始JSON作为Restful服务的响应传递?

时间:2015-06-19 19:31:51

标签: java json rest

我有一个RestService,我在其中返回一个JSON响应,如下所示。

以下是我的代码:

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@GET
@Path("/json/lime")
@Produces(MediaType.APPLICATION_JSON)
public DataResponse getData(@Context DataInfo info) {

    // some code here
    System.out.println(resp.getResponse());
    return new DataResponse(resp.getResponse());
}

以下是我在点击Restful Service后得到的实际JSON响应:

{
    "response": "{\"ABC\":100,\"PQR\":\"40\"}\n",
}

这就是从System.out打印出来的内容,如上所示:

{"ABC":100,"PQR":"40"}

这是我的DataResponse课程:

public class DataResponse {

    private String response;

    public DataResponse(String response) {
        this.response = response;
    }

    public String getResponse() {
        return this.response;
    }
}

如您所见,我的response字符串在上面的JSON中被转义。而且我不确定为什么?任何人都可以帮助我理解为什么会发生这种情况以及如何解决它?

3 个答案:

答案 0 :(得分:2)

使用Response类:

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;

    @GET
    @Path("/json/lime")
    @Produces(MediaType.APPLICATION_JSON)
    public ResponsegetData(@Context DataInfo info) {
        ...
        return Response.status(200).entity(resp.getResponse()).build();
    }

答案 1 :(得分:1)

问题是您正在尝试返回JSON字符串作为响应。让webservice为您构建JSON(不要自己构建JSON字符串):

public class DataResponse {

    private int ABC;
    private String PQR;

    public DataResponse()
    {

    }

    public DataResponse(int ABC, String PQR) {
        this.ABC = 100;
        this.PQR = "40";
    }
    //getters and setters here
}

以上只是一个我不希望你硬编码值的例子。

以上结果JSON应该是:

{
    "ABC":100,
    "PQR":"40"
}

该程序正在按预期工作,它正在将您的DataResponse类更改为JSON,但由于您在其正在转换的字符串中存储了JSON,因此它在{{1}中转义为字符}}

Javascript

您的javascript对象将是这样的:

{
    "response": "{\"ABC\":100,\"PQR\":\"40\"}\n",
}

应打印:

window.alert(data.response);

我希望你明白我的意思,不仅仅是问......

*************** **** UPDATE ********************************************* ***********

{"ABC":100,"PQR":"40"} //same as system.out.print

Javascript方将@GET @Path("/json/lime") @Produces(MediaType.TEXT_PLAIN) public String getData(@Context DataInfo info) { // some code here System.out.println(resp.getResponse()); return resp.getResponse(); } 转换为String示例:

Object

var test = JSON.parse("{\"ABC\":100,\"PQR\":\"40\"}"); window.alert(test.ABC); window.alert(test.PQR); String参考here

答案 2 :(得分:0)

您的回复中包含双引号。如果没有转义它们,该值将无法解析,例如,您的字符串看起来像“{”ABC“:100,”PQR“:”40“} \ n”,这根本不是有效的字符串值。要包含字符串中具有特殊含义的任何字符,必须对其进行转义。