0

REST サービスを利用するために HttpUrlConnection を使用しています。以下に示すように、GET を実行するとき、文字ごとに返される情報を取得したくありません。返される形式で結果を取得したい。ここでは、たとえば、のようなものではなく、ブール値を取得したいと考えていますSystem.out.print((char) ch);。どうすれば受け取ることができますか?

文字列をブール型に解析できることはわかっていますが、別のデータ型を受け取ったら?

public class SensorGetDoorStatus {

public static void main(String[] args) throws Exception
{
    HttpURLConnection urlConnection = null;

try {
    String webPage = "http://localhost:8080/LULServices/webresources/services.sensors/doorstatus";
            String name = "xxxx";
    String password = "xxxx";

            Authenticator myAuth = new Authenticator() 
            {
              final String USERNAME = "xxxx";
              final String PASSWORD = "xxxxx";

              @Override
              protected PasswordAuthentication getPasswordAuthentication()
              {
                return new PasswordAuthentication(USERNAME, PASSWORD.toCharArray());
              }
            };

            Authenticator.setDefault(myAuth);

    String authString = name + ":" + password;
    byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
    String authStringEnc = new String(authEncBytes);

    URL urlToRequest = new URL(webPage);
    urlConnection = (HttpURLConnection) urlToRequest.openConnection();

    urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc);
    System.out.println("Authorization : Basic " + authStringEnc);

    urlConnection.setRequestMethod("GET");
    urlConnection.setRequestProperty("Accept", "application/json");                
    urlConnection.setReadTimeout(15*1000);
    urlConnection.connect();

    InputStream inStrm = urlConnection.getInputStream();

    int ch;
    while (((ch = inStrm.read()) != -1))
         System.out.print((char) ch);
    inStrm.close(); 


} catch (MalformedURLException e) {
        e.printStackTrace();
} catch (IOException e) {
        System.out.println("Failure processing URL");
        e.printStackTrace();
} catch (Exception e) {
        e.printStackTrace();
    }

    finally {
    if (urlConnection != null) {
        urlConnection.disconnect();
    }
}
 }

}

4

2 に答える 2

1

私はいじってみたいと思います.1行BufferedReaderずつ読むことInputStreamができ、そのようにデータを解析できるかもしれません。

ただし、データが XML や JSON などの事前定義された形式である場合は、ライブラリを使用して応答データを解析することをお勧めします。

于 2013-03-27T11:59:00.897 に答える
1

DataInputStream の使用を検討することをお勧めします。このクラスのメソッド readBoolean メソッドを使用してブール値を読み取ることができます。

DataInputStream と DataOutputStream は、int、float、long などの特定のデータ型を読み書きするメソッドも提供します。

データを送信している相手側で、クラス DataOutputStream の writeBoolean を記述しておく必要があります。

コードは次のようになります。

 InputStream inStrm = urlConnection.getInputStream();
 DataInputStream doi = new DataInputStream(inStrm);
 boolean bol = doi.readBoolean();

  doi.close();
  inStrm.close(); 
于 2013-03-27T12:02:41.827 に答える