1

次のような複数行、複数列の応答を返す REST エンドポイントをヒットしようとしています。

A1 B1 C1
A2 B2 C2
A3 B3 C3
...
...

現在、jersey-client を使用してこのエンドポイントに到達し、この応答を解析する最も適切な方法を探しています。ここでは、各行は Bean を表し、MyBeanその上の各列はその Bean のプロパティを表します。応答の値の順序は常に固定されています。

応答を長い文字列として取得し、それを改行とタブで分割して個々の値を取得できます。

List<String>ただし、の各要素がList応答の行を表すとして結果を取得できる方法があるかどうかを知りたいです。次に、それを分割して\t個々の値を取得できます。

これが私が試したことです:

    WebResource resource = client.resource(NETSPEAK_URL)
                 .type(MediaType.TEXT_PLAIN)
                 .get(new GenericType<List<String>>(){});

ただし、これにより次の例外が発生します。

    A message body reader for Java class java.util.List, 
    and Java type java.util.List<java.lang.String>, 
    and MIME media type text/plain; charset=UTF-8 was not found

もっと貪欲であれば、Bean のプロパティにマップされた個々の列の値を取得できるかどうかを知りたいですMyBeanMyBeanのリストを作成するために の周りにラッパーを作成することを検討しましたMyBeanが、解析を支援するためにどのように注釈を付けますか? これは、xml/json 応答の場合は理にかなっています。しかし、これはプレーンテキストです。

このテキスト/プレーン応答の解析について jersey-client に何らかの方法で伝えることは可能ですか? これが Apache HTTP クライアントを介して達成可能であれば、移行する準備ができています。

ありがとう

4

1 に答える 1

1

You may want to implement a class representing your list of beans, say class BeanList extends List<Bean>, and implement a MessageBodyReader<BeanList> (see http://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/ext/MessageBodyReader.html) to teach jersey how to read a string as a BeanList.

Then you can use BeanList.class instead of List<String> as argument to the get call.

于 2012-07-16T19:33:05.990 に答える