我一直在为公司的不同服务尝试并创建多个小型 Java RESTful 客户端库。大多数时候,我无法更改服务器端的任何内容,我需要编写Jersey https://jersey.java.net与现有 RESTful API 交互的代码片段。
Context
据了解,我一直在使用 JerseyJackson http://jackson.codehaus.org使用 JSON:当我查询 POJO 时,我将其从 JSON 反序列化,当我需要发送 POJO 时,我将其序列化为 JSON 主体。到目前为止,这两种片段一直在为我做工作......
查询和反序列化
ClientResponse response = webResource
.path("/path/to/resource")
.queryParam("key", "value")
.accept(Mediatype.APPLICATION_JSON)
.get(ClientResponse.class);
// (...) Check response status code
MyClassPojo pojo = response.getEntity(MyClassPojo.class);
序列化和发送
ClientResponse response = webResource
.path("/path/to/resource")
.type(Mediatype.APPLICATION_JSON_TYPE)
.accept(Mediatype.APPLICATION_JSON)
.post(ClientResponse.class, pojo)
// (...) Check response status code
Issue
我现在面临着一个 RESTful 服务器,它不接受 JSON 主体来发送我的 POJO。唯一有效的方法是使用查询参数。
例如,如果我想发送对象
public MyClassPojo {
public int attr1;
public String attr2;
}
MyClassPojo pojo = new MyClassPojo();
pojo.attr1 = 42;
pojo.attr2 = "Foo bar";
我很想用 JSON 序列化它:
{
"attr1": 42,
"attr2": "Foo bar"
}
但这个特定的 RESTful 服务器需要查询参数:
?attr1=42&attr2=Foo+bar
Question
这有点糟糕,但我真的别无选择……我现在希望有一种简单的方法可以用 Jersey 实现这一点:如何自动将对象序列化为查询参数,以发送到 RESTful 服务器?
Note:我在@Jukka 回答后关闭了这个问题。如果您像我一样实际上正在寻找一种发送 x-www-form-urlencoded 数据的方法,请毫不犹豫地提及您创建的新问题。我即将开始做一些事情......