【问题标题】:Parsing multi-line, multi-column text response with jersey/apache REST client使用 jersey/apache REST 客户端解析多行、多列文本响应
【发布时间】:2012-07-15 16:05:15
【问题描述】:

我正在尝试访问返回多行、多列响应的 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 的属性 MyBean。我考虑过围绕MyBean 创建一个包装器,以获得MyBeans 的列表,但是我将如何对其进行注释以帮助解析?这对于 xml/json 响应是有意义的。但这是纯文本。

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

谢谢

【问题讨论】:

    标签: java rest jersey


    【解决方案1】:

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

    然后您可以使用BeanList.class 而不是List&lt;String&gt; 作为get 调用的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2018-08-03
      相关资源
      最近更新 更多