使用jersey / apache REST客户端解析多行,多列文本响应

时间:2012-07-16 18:45:51

标签: java rest jersey

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

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

由于

1 个答案:

答案 0 :(得分:1)

你可能希望实现一个代表你的bean列表的类,比如说class BeanList extends List<Bean>,并实现一个MessageBodyReader<BeanList>(参见http://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/ext/MessageBodyReader.html)来教会球衣如何读取一个字符串作为{ {1}}。

然后,您可以使用BeanList代替BeanList.class作为List<String>来电的参数。