如何使用泽西在POST请求体中发送2个PoJos?

时间:2016-03-20 12:47:07

标签: java rest http gradle jersey

我想使用汗布发送带有POST的Pojo。

据我所知,Jersey有2个版本:1 ...和2 ...

我将代码添加到使用以下项目的现有项目中:

compile('com.sun.jersey:jersey-bundle:1.19')
compile('com.sun.jersey:jersey-json:1.19')
compile group:  'org.codehaus.jackson', name:'jackson-jaxrs', version: '1.1.1'

我尝试过几种方法在POST请求体中发送2个PoJos。

但他们都没有工作。

public void acquireDevice1(Device device, int port) throws InvalidArgumentException {

    WebResource webResource = this.client.resource(this.rootUri);
    webResource.type(MediaType.APPLICATION_JSON)
            .accept(MediaType.APPLICATION_JSON)
            .post(Device.class, device)
            .post(Integer.class, port);

}

@Override
public void acquireDevice(Device device, int port) throws InvalidArgumentException {
    ObjectMapper mapper = new ObjectMapper();
    String deviceString = null;
    try {
        deviceString = mapper.writeValueAsString(device);
    } catch (IOException e) {}

    Client client = Client.create();
    WebResource webResource = client.resource(rootUri + "/devices/acquireDevice/");

    ClientResponse response = webResource
            .type("application/json")
            .post(ClientResponse.class, deviceString);

    if (response.getStatus() != 201) {
        throw new RuntimeException("Failed : HTTP error code : "
                + response.getStatus());
    }
}

我应该将它全部包装在map<string,object>吗?

1 个答案:

答案 0 :(得分:0)

后期操作不可组合,每个操作都映射到一个Web请求,以支持您需要使用组合它们的第三个pojo将两个Pojos组合成一个pojo,即DeviceWithPort(或者您建议的地图) - 虽然那些可读性较低,或者是一个元组。)

Jersey1 / 2在这方面没有任何差异,如上所述,这是HTTP的一部分,因此没有客户可能做任何不同的事情。