1

我正在尝试访问返回多行、多列响应的 REST 端点,例如:

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

我目前正在使用 jersey-client 来访问这个端点,并试图寻找最简洁的方法来解析这个响应。在这里,每一行代表一个 bean,比方说MyBean,其中的每一列代表该 bean 中的一个属性。响应中值的顺序始终是固定的。

我可以将响应作为长字符串返回,将其拆分为换行符和制表符以获取单个值。

但是,我想知道是否有一种方法可以将结果作为 a 获得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 的属性,MyBean. 我考虑过在 周围创建一个包装器MyBean,以获得一个MyBeans 列表,但是我将如何对其进行注释以帮助解析?这对于 xml/json 响应是有意义的。但这是纯文本。

是否有可能以某种方式告诉 jersey-client 关于解析此文本/普通响应的信息?如果这可以通过 Apache HTTP 客户端实现,我已经准备好搬家了。

谢谢

4

1 回答 1

1

您可能想要实现一个代表您的 bean 列表的类,例如class BeanList extends List<Bean>,并实现一个MessageBodyReader<BeanList>(参见http://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/ext/MessageBodyReader.html)来教jersey 如何将字符串读取为BeanList.

然后,您可以使用BeanList.class而不是List<String>作为get调用的参数。

于 2012-07-16T19:33:05.990 回答