0

Ich kann nicht einen API-Aufruf im Play-Framework mit Java aufrufen. der Code sieht wie eine gute aus, aber der API-Aufruf wurde nicht ausgelöst (API-Aufruf funktioniert gut in Postman). Ich denke, es könnte das Problem im Zusammenhang mit Threads sein und ich bin nicht in der Lage, die asynchrone Aufgabe im Play-Framework zu schreiben, bitte helfen Sie mir. Das Beste hoffen! Danke im Voraus!POST REST API-Aufruf mit JSON-Body funktioniert nicht im Play-Framework mit Java

finden Sie den Code der API in der Steuerung Datei Offenbar

public Result updateTripDetail() { 
//few statements; 
      String url = "https://medicines-XXX/MZIMRestServicesXXX/v1/XXXX"; 
      JSONObject jsonBody = new JSONObject(); 
      jsonBody.put("source_type", "XXX"); 
      jsonBody.put("omorder_id", "25852"); 
      if (Rescheduled.equals(ride.getRideStatus())) { 
       jsonBody.put("order_status", "RequestForReschedule"); 
      } else if (RideCancelled.equals(ride.getRideStatus())) { 
       jsonBody.put("order_status", "RequestForCancel"); 
      } else { 
       jsonBody.put("order_status", ride.getRideStatus()); 
      } 
      jsonBody.put("last_updated_on", new Date()); 
      apiPostCall(url,jsonBody.toString()); 
    return redirect("/ride/rideList"); 
} 

public void apiPostCall(String completeUrl, String body) { 
    HttpClient httpClient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost(completeUrl); 
    httpPost.setHeader("Content-type", "application/json"); 
    try { 
     StringEntity stringEntity = new StringEntity(body); 
     httpPost.getRequestLine(); 
     httpPost.setEntity(stringEntity); 
     httpClient.execute(httpPost); 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 
} 
+0

Warum gehst du nicht verwenden, um die WS-API? https://www.playframework.com/documentation/2.2.x/JavaWS –

+0

Der Code, mit dem Sie Probleme haben, gehört nicht zum Play-Framework und Sie geben zu diesen Klassen nichts an. Es ist auch ziemlich vage, was das eigentliche Problem/der Fehler ist. Es würde helfen, wenn Sie diese Dinge klären. – gpgekko

+0

Haben Sie das Debuggen versucht, wenn Sie es ausführen, erreicht es den Ausführungsaufruf? – Jaanus

Antwort

0

Aufruf, Sie sind nicht spielen Befehle für Ihren HTTP-Anforderung verwendet wird. Der Code sollte wie folgt sein:

public void updateTripDetail() { 
//few statements; 
      String url = "https://medicines-XXX/MZIMRestServicesXXX/v1/XXXX"; 
      JSONObject jsonBody = new JSONObject(); 
      jsonBody.put("source_type", "XXX"); 
      jsonBody.put("omorder_id", "25852"); 
      if (Rescheduled.equals(ride.getRideStatus())) { 
       jsonBody.put("order_status", "RequestForReschedule"); 
      } else if (RideCancelled.equals(ride.getRideStatus())) { 
       jsonBody.put("order_status", "RequestForCancel"); 
      } else { 
        jsonBody.put("order_status", ride.getRideStatus()); 
       } 
       jsonBody.put("last_updated_on", new Date()); 
       apiPostCall(url,jsonBody.toString()); 
     //As an asynchronous request it would 
     //probably redirect before completing your request so void it's okay 
     //return redirect("/ride/rideList"); 
    } 

public Promise<Result> apiPostCall(String completeUrl, String body) { 
     return WS.url(completeUrl) 
       .setHeader("Content-Type", "application/json") 
       .post(body).map(
         new F.Function<WS.Response, Result>() { 
          public Result apply(WS.Response response) { 
           //you can handle your response here 
           //String token = response.asJson().findPath("access_token").asText(); 
           return redirect("/ride/rideList"); 
          } 
         } 
       ); 
    }