Как проанализировать список <SomeEntity>в Джерси response.readEntity? - PullRequest
0 голосов
/ 31 мая 2019

У меня есть клиент, который делает вызов покой на сервере, как это:

        Entity<RequestObject> entity = Entity.json(new RequestObject(Arrays.asList(1, 2, 3), Arrays.asList("xColumn", "yColumn")));

        ClientConfig config = new ClientConfig();
        config.register(JacksonJsonProvider.class);

        Client client = ClientBuilder.newClient(config);

        Response response = client.target("http://172.18.0.1:10000/getProductsData")
                .request(MediaType.APPLICATION_JSON_TYPE)
                .post(Entity.json(entity.getEntity()), Response.class);  

         List<WarehouseProductData> dwsData = response.readEntity(new GenericType<List<WarehouseProductData>>(){});

        client.close();  

Другой сервер отвечает следующим методом:

@PostMapping("/getProductsData")
public List<WarehouseProductData> greetingPost1(@RequestBody String json) {

WarehouseProductData wd = new WarehouseProductData(85654865);
wd.addData("xColumn", "value of product 85654865 for x column");
wd.addData("yColumn", "value of product 85654865 for y column");
wd.addData("the me column", "value of product 85654865 for 'the me column' column");
wd.addData("response for x", "1");
wd.addData("response for x", "2");

return Collections.singletonList(wd);  

Класс WarehauseProductData выглядит следующим образом:

public class WarehouseProductData {
        private int agoId;
    private Map<String, String> data;

    public WarehouseProductData(int agoId, Map<String, String> data) {
        this.agoId = agoId;
        this.data = data;
    }

    public WarehouseProductData(int agoId) {
        this.agoId = agoId;
        this.data = new HashMap<>();
    }

    public int getAgoId() {
        return agoId;
    }

    public void setAgoId(int agoId) {
        this.agoId = agoId;
    }

    public Map<String, String> getData() {
        return data;
    }

    public void setData(Map<String, String> data) {
        this.data = data;
    }

    public void addData(String columnName, String value) {
        data.put(columnName, value);
    }

}

Проблема в том, что когда

List<WarehouseProductData> dwsData = response.readEntity(new GenericType<List<WarehouseProductData>>(){});  

запускается, dwsData выглядит так:

dwsData size = 1  
   |  
   --0 {WarehouseProductData}  
     |  
     -- agoId = 85654865  
     |  
     -- data = null (!!!which is incorect!!!)  

Так как же разобрать ответ, чтобы правильно получить поле data?

...