2017-04-16 121 views
0

我正在開發java中的API來獲取json從GoEuro API可在github處獲得。我想知道我需要用POST方法發送的參數,並將結果作爲json並與我的自定義邏輯結合使用。我想從goeuro api得到結果json

這是我的java代碼來調用api。

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 

public class JsonEncodeDemo { 
    public static void main(String[] args) { 
     try { 

      URL url = new URL("http://www.goeuro.com/GoEuroAPI/rest/api/v3/search?departure_fk=318781&departure_date=16%2F04%2F2017&arrival_fk=380553&trip_type=one-way&adults=1&children=0&infants=0&from_filter=Coventry+%28COV%29%2C+United+Kingdom&to_filter=London%2C+United+Kingdom&travel_mode=bus&ab_test_enabled="); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setRequestMethod("POST"); 

//   conn.setRequestMethod("GET"); 
      conn.setRequestProperty("Accept", "application/json"); 

      if (conn.getResponseCode() != 200) { 
       throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode()); 
      } 

      BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream()), "UTF-8")); 

      String output; 
      System.out.println("Output from Server .... \n"); 
      while ((output = br.readLine()) != null) { 
       System.out.println(output); 
      } 

      conn.disconnect(); 

     } catch (MalformedURLException e) { 

      e.printStackTrace(); 

     } catch (IOException e) { 

      e.printStackTrace(); 

     } 

    } 
} 

我不擅長nodejs。任何幫助,將不勝感激。

+0

您是否收到任何錯誤?你能解釋一下你的預期產出嗎? –

+0

首先我不確定,我附加了所需的參數。輸出也應該在json字符串中。 –

+0

你得到這個錯誤的迴應? :{ 「message」:「400:Bad Request」, 「errorClass」:「InvalidRequestEntityException」, 「description」:「Validation failed」, 「items」:[ 「SearchQuery.locale may not be null」, 「SearchQuery.domain不能爲空」, 「SearchQuery.departurePosition不能爲空」, 「SearchQuery.outboundDate不能爲空」, 「SearchQuery.resultFormat不能爲空」, 「SearchQuery.arrivalPosition可能不爲空「, 」SearchQuery.currency可能不爲空「 ] } –

回答

0

但是,我發現我的答案從github問題。

這裏是必需的參數和那裏預期的json格式。

{ 
    "arrivalPosition":{ 
     "positionId":380244 
}, 
    "currency":"EUR", 
    "departurePosition":{ 
     "positionId":380553 
    }, 
    "domain":"com", 
    "inboundDate":"2017-04-19T00:00:00.000", 
    "locale":"en", 
    "outboundDate":"2017-04-18T00:00:00.000", 
    "passengers":[ 
     { 
     "age":18, 
     "rebates":[] 
     } 
    ], 
    "resultFormat":{ 
     "splitRoundTrip":true 
    }, 
    "searchModes":[ 
     "directbus" 
] 
} 
0

所有URL的第一需要是僅此http://www.goeuro.com/GoEuroAPI/rest/api/v3/search

然後你需要添加使用PARAMS的請求參數。

如果您的迴應!= 200必須在您提出請求後。

public static void main(String[] args) { 
     try { 

      URL url = new URL("http://www.goeuro.com/GoEuroAPI/rest/api/v3/search); 
      HttpURLConnection con = (HttpURLConnection) url.openConnection(); 

      con.setRequestMethod("POST"); 
      con.setRequestProperty("Accept", "application/json"); 

      String urlParameters = "departure_fk=318781&departure_date=16%2F04%2F2017&arrival_fk=380553&trip_type=one-way&adults=1&children=0&infants=0&from_filter=Coventry+%28COV%29%2C+United+Kingdom&to_filter=London%2C+United+Kingdom&travel_mode=bus&ab_test_enabled="; 

      // Send post request 
      con.setDoOutput(true); 
      DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
      wr.writeBytes(urlParameters); 
      wr.flush(); 
      wr.close(); 

      int responseCode = con.getResponseCode(); 
      System.out.println("\nSending 'POST' request to URL : " + url); 
      System.out.println("Post parameters : " + urlParameters); 
      System.out.println("Response Code : " + responseCode); 

      BufferedReader in = new BufferedReader(
        new InputStreamReader(con.getInputStream())); 
      String inputLine; 
      StringBuffer response = new StringBuffer(); 

      while ((inputLine = in.readLine()) != null) { 
       response.append(inputLine); 
      } 
      in.close(); 

      //print result 
      System.out.println(response.toString()); 

    }