0

我正在使用自定义 itemReader 从外部休息 API 读取数据,它工作得很好。但是,当使用 ItemProcessor 将数据处理到我的模型类中时,就会出现问题。不幸的是,API 响应是一个对象,其中嵌套了一个数组,这意味着我必须使用引用另一个类的列表来存储其中的数据。

API 响应图片

StockDTO 数据类:

public class StockDTO {

    //  We will change the field data types later when we process the data into our model.
    private String from;
    private String to;
    private List<ProductDTO> products;

    //  Getters and Setters allow RestTemplate to set the data from the external rest API.
    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String getTo() {
        return to;
    }

    public void setTo(String to) {
        this.to = to;
    }

    public List<ProductDTO> getProducts() {
        return products;
    }

    public void setProducts(List<ProductDTO> products) {
        this.products = products;
    }
}

ProductDTO 数据类(列表数据):

public class ProductDTO {

    //  We will change the field data types later when we process the data into our model.
    private String sku;
    private String name;
    private String startDate;

    //  Getters and Setters allow RestTemplate to set the data from the external rest API.
    public String getSku() {
        return sku;
    }

    public void setSku(String sku) {
        this.sku = sku;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getStartDate() {
        return startDate;
    }

    public void setStartDate(String startDate) {
        this.startDate = startDate;
    }
}

模型类:

@Entity
public class Stock {

    @Id
    private long id;
    private int item_from;
    private int item_to;
    private long sku;
    private String name;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public int getItem_from() {
        return item_from;
    }

    public void setItem_from(int item_from) {
        this.item_from = item_from;
    }

    public int getItem_to() {
        return item_to;
    }

    public void setItem_to(int item_to) {
        this.item_to = item_to;
    }

    public long getSku() {
        return sku;
    }

    public void setSku(long sku) {
        this.sku = sku;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

ItemProcessor<StockDTO, Stock>

public class StockDataProcessor implements ItemProcessor<StockDTO, Stock> {

    @Override
    public Stock process(StockDTO stockDTO) throws Exception {

        Stock stock = new Stock();

        stock.setItem_from(Integer.parseInt(stockDTO.getFrom()));
        stock.setItem_to(Integer.parseInt(stockDTO.getTo()));
        //  I'm only able to get the first index sku, name from the list:
        stock.setSku(Long.parseLong(stockDTO.getProducts().get(0).getSku()));
        stock.setName(stockDTO.getProducts().get(0).getName());

        return stock;
    }
}

我应该创建另一个名为 Product 的模型类以便我可以创建 ItemProcessor<ProductDTO, Product> 还是可以在不创建另一个处理器的情况下从 ItemProcessor<StockDTO, Stock> 获取所有列表项?谢谢你。

4

1 回答 1

1

您可以创建另一个名为 Product 的模型类并修改 Stock 类以包含一个 List 并修改您的 ItemProcessor 以填充 Stock 类中的 Product 列表。

或者,您可以让 ItemProcessor 返回一个 List 而不是一个 Stock。然后,您的 ItemWriter 将需要处理 List<List>。

于 2021-08-15T23:22:33.430 回答