Return JSON 来自 Play Framework 控制器的字符串
Return JSON string from Play Framework controller
我正在向客户发出 ajax POST 请求。我的 Play Framework 控制器向 returns JSON 的跨域服务器发出请求。然后我想将此 JSON 转发给客户。当我调用 Promise<JsonNode>.toString()
时,似乎我收到了一个内存地址。我如何才能将实际的 JSON 返回给客户端?
public static Result addVenue() {
final Map<String, String[]> values = request().body().asFormUrlEncoded();
String queryString = values.get("venueName")[0] + ",+" + values.get("venueAddress")[0] + ",+" + values.get("venueCity")[0] + ",+" + values.get("venueState")[0] + "+" + values.get("venueZip")[0];
String queryURL = "https://maps.googleapis.com/maps/api/place/textsearch/json?query=" + queryString + "&key=" + "AIzaSyD1xSgKUnEZ_tM7qzcEAeM-SJBxPFhIpaU";
queryURL = queryURL.replaceAll(" ", "+");
Promise<JsonNode> jsonPromise = WS.url(queryURL).get().map(
new Function<WSResponse, JsonNode>() {
public JsonNode apply(WSResponse response) {
JsonNode json = response.asJson();
return json;
}
}
);
response().setHeader("Access-Control-Allow-Origin", "*");
response().setHeader("Allow", "*");
response().setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS");
response().setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Referer, User-Agent");
return ok(jsonPromise.toString());
}
Return 结果的承诺:
public static Promise<Result> addVenue() {
return WS.url(URL).get().map((response) -> {
return ok(response.asJson());
});
}
我终于能够使用以下代码 return JSON。我的实现与提供的另一个答案略有不同。我会提供它以防万一另一个对某些人不起作用。
final Promise<Result> resultPromise = WS.url(queryURL).get().map(
new Function<WSResponse, Result>() {
public Result apply(WSResponse response) {
Logger.info(response.asJson().toString());
return ok(response.asJson().toString());
}
}
);
return resultPromise;
我正在向客户发出 ajax POST 请求。我的 Play Framework 控制器向 returns JSON 的跨域服务器发出请求。然后我想将此 JSON 转发给客户。当我调用 Promise<JsonNode>.toString()
时,似乎我收到了一个内存地址。我如何才能将实际的 JSON 返回给客户端?
public static Result addVenue() {
final Map<String, String[]> values = request().body().asFormUrlEncoded();
String queryString = values.get("venueName")[0] + ",+" + values.get("venueAddress")[0] + ",+" + values.get("venueCity")[0] + ",+" + values.get("venueState")[0] + "+" + values.get("venueZip")[0];
String queryURL = "https://maps.googleapis.com/maps/api/place/textsearch/json?query=" + queryString + "&key=" + "AIzaSyD1xSgKUnEZ_tM7qzcEAeM-SJBxPFhIpaU";
queryURL = queryURL.replaceAll(" ", "+");
Promise<JsonNode> jsonPromise = WS.url(queryURL).get().map(
new Function<WSResponse, JsonNode>() {
public JsonNode apply(WSResponse response) {
JsonNode json = response.asJson();
return json;
}
}
);
response().setHeader("Access-Control-Allow-Origin", "*");
response().setHeader("Allow", "*");
response().setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS");
response().setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Referer, User-Agent");
return ok(jsonPromise.toString());
}
Return 结果的承诺:
public static Promise<Result> addVenue() {
return WS.url(URL).get().map((response) -> {
return ok(response.asJson());
});
}
我终于能够使用以下代码 return JSON。我的实现与提供的另一个答案略有不同。我会提供它以防万一另一个对某些人不起作用。
final Promise<Result> resultPromise = WS.url(queryURL).get().map(
new Function<WSResponse, Result>() {
public Result apply(WSResponse response) {
Logger.info(response.asJson().toString());
return ok(response.asJson().toString());
}
}
);
return resultPromise;