我有一个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中被转义。而且我不确定为什么?任何人都可以帮助我理解为什么会发生这种情况以及如何解决它?
答案 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”,这根本不是有效的字符串值。要包含字符串中具有特殊含义的任何字符,必须对其进行转义。