2015-02-05 2 views
0

Я делаю запрос POJ от ajax от клиента. Контроллер My Play Framework делает запрос на междоменный сервер, который возвращает JSON. Затем я хочу отправить этот JSON клиенту. Когда я звоню Promise<JsonNode>.toString(), Кажется, я получаю адрес памяти. Как я могу вернуть фактический JSON клиенту?Верните строку JSON из контроллера Play Framework

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()); 
} 
+0

Вы прочитали документы? Ответ есть. https://www.playframework.com/documentation/2.3.x/JavaAsync – Ryan

+0

@Ryan да, однако, документация относится к возврату тела запроса в качестве сына, а не к получению нового ответа от внешней веб-службы. –

+0

Просто любопытно, почему это было -1? –

ответ

2

Возвращение обещание результата вместо:

public static Promise<Result> addVenue() { 
    return WS.url(URL).get().map((response) -> { 
     return ok(response.asJson()); 
    }); 
} 
+0

Спасибо. Наконец-то я смог понять это вчера вечером. Мой код немного отличается. Я отправлю его ниже. –

0

я, наконец, смог вернуть 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; 
+0

Это то же самое, что и выше, но для Java 7 :) Обратите внимание, что вам не нужно использовать «.toString()», чтобы отправить Json в ответ – Loic

Смежные вопросы