我正在尝试点击返回多行多列响应的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客户端实现,我已经准备好了。
由于
答案 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>
来电的参数。