相关疑难解决方法(0)

如何使用Jersey将POJO序列化为查询参数

我一直在为我公司的不同服务创建多个小型Java RESTful客户端库.大多数时候,我无法在服务器端更改任何内容,我需要编写Jersey代码片段以与现有RESTful API进行交互.


上下文

据我所知,我一直在使用Jersey和Jackson来使用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);
Run Code Online (Sandbox Code Playgroud)

序列化和发送

ClientResponse response = webResource
    .path("/path/to/resource")
    .type(Mediatype.APPLICATION_JSON_TYPE)
    .accept(Mediatype.APPLICATION_JSON)
    .post(ClientResponse.class, pojo)

// (...) Check response status code
Run Code Online (Sandbox Code Playgroud)

问题

我现在面临一个RESTful服务器,它不接受JSON主体发送我的POJO.似乎唯一有用的是使用查询参数.

例如,如果我想发送对象

public MyClassPojo {
    public int attr1;
    public String attr2;
}

MyClassPojo pojo = new MyClassPojo();
pojo.attr1 = 42;
pojo.attr2 = "Foo bar";
Run Code Online (Sandbox Code Playgroud)

我本来喜欢用JSON序列化它:

{
    "attr1": 42,
    "attr2": "Foo bar"
}
Run Code Online (Sandbox Code Playgroud)

但是这个特定的RESTful服务器期待查询参数:

?attr1=42&attr2=Foo+bar …
Run Code Online (Sandbox Code Playgroud)

java rest jersey pojo query-parameters

5
推荐指数
1
解决办法
4700
查看次数

标签 统计

java ×1

jersey ×1

pojo ×1

query-parameters ×1

rest ×1