JSON 项目读取器和写入器

Spring Batch 提供对以下格式的 JSON 资源的读取和写入支持

[
  {
    "isin": "123",
    "quantity": 1,
    "price": 1.2,
    "customer": "foo"
  },
  {
    "isin": "456",
    "quantity": 2,
    "price": 1.4,
    "customer": "bar"
  }
]

假设 JSON 资源是对应于单个项目的 JSON 对象数组。Spring Batch 不绑定到任何特定的 JSON 库。

JsonItemReader

JsonItemReader 将 JSON 解析和绑定委托给 org.springframework.batch.item.json.JsonObjectReader 接口的实现。此接口旨在通过使用流式 API 以块的形式读取 JSON 对象来实现。目前提供了两种实现

  • Jackson 通过 org.springframework.batch.item.json.JacksonJsonObjectReader

  • Gson 通过 org.springframework.batch.item.json.GsonJsonObjectReader

为了能够处理 JSON 记录,需要以下内容

  • Resource: 表示要读取的 JSON 文件的 Spring 资源。

  • JsonObjectReader: 用于解析 JSON 对象并将其绑定到项目的 JSON 对象读取器

以下示例展示了如何定义一个JsonItemReader,它与之前的 JSON 资源org/springframework/batch/item/json/trades.json和基于 Jackson 的JsonObjectReader一起使用。

@Bean
public JsonItemReader<Trade> jsonItemReader() {
   return new JsonItemReaderBuilder<Trade>()
                 .jsonObjectReader(new JacksonJsonObjectReader<>(Trade.class))
                 .resource(new ClassPathResource("trades.json"))
                 .name("tradeJsonItemReader")
                 .build();
}

JsonFileItemWriter

JsonFileItemWriter将项目的编组委托给org.springframework.batch.item.json.JsonObjectMarshaller接口。该接口的约定是接收一个对象并将其编组为 JSON String。目前提供了两个实现

  • Jackson 通过org.springframework.batch.item.json.JacksonJsonObjectMarshaller

  • Gson 通过org.springframework.batch.item.json.GsonJsonObjectMarshaller

为了能够写入 JSON 记录,需要以下内容:

  • Resource:一个 Spring Resource,表示要写入的 JSON 文件

  • JsonObjectMarshaller:一个 JSON 对象编组器,用于将对象编组为 JSON 格式

以下示例展示了如何定义一个JsonFileItemWriter

@Bean
public JsonFileItemWriter<Trade> jsonFileItemWriter() {
   return new JsonFileItemWriterBuilder<Trade>()
                 .jsonObjectMarshaller(new JacksonJsonObjectMarshaller<>())
                 .resource(new ClassPathResource("trades.json"))
                 .name("tradeJsonFileItemWriter")
                 .build();
}