如何使用 Spring 批处理将 DB 的输出漂亮地打印到 JSON 文件?
How to pretty print the output from DB to a JSON file using Spring batch?
我已经实现 JsonFileItemWriter
将数据从数据库写入文件作为 json 结构。但是我没有看到漂亮打印 json.
的选项
以下示例显示如何定义 JsonFileItemWriter:
@Bean
public JsonFileItemWriter<Trade> jsonFileItemWriter() {
return new JsonFileItemWriterBuilder<Trade>()
.jsonObjectMarshaller(new JacksonJsonObjectMarshaller<>())
.resource(new ClassPathResource("trades.json"))
.name("tradeJsonFileItemWriter")
.build();
}
实际输出:
[
{name="abc", id="1"},
{name="abcd", id="2"}
]
预期:
[
{
name="abc",
id="1"
},
{
name="abcd",
id="2"
}
]
因为我们没有任何选项可以将漂亮的打印添加到默认 JacksonJsonObjectMarshaller
我已经实现了我自己的 JacksonJsonObjectMarshaller
并向它添加了漂亮的打印选项。
public String marshal(T item) {
try {
ObjectWriter objectWriter = objectMapper.writer().withDefaultPrettyPrinter();
return objectWriter.writeValueAsString(item);
} catch (JsonProcessingException e) {
throw new ItemStreamException("Unable to marshal object " + item + " to Json", e);
}
}
另一个选项:
使用漂亮的打印选项创建新的 ObjectMapper,然后将其传递给 JacksonJsonObjectMarshaller
。
ObjectMapper objectMapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
return new JsonFileItemWriterBuilder<Trade>()
.jsonObjectMarshaller(new JacksonJsonObjectMarshaller<>(objectMapper))
.resource(new ClassPathResource("trades.json"))
.name("tradeJsonFileItemWriter")
.build();
我已经实现 JsonFileItemWriter
将数据从数据库写入文件作为 json 结构。但是我没有看到漂亮打印 json.
以下示例显示如何定义 JsonFileItemWriter:
@Bean
public JsonFileItemWriter<Trade> jsonFileItemWriter() {
return new JsonFileItemWriterBuilder<Trade>()
.jsonObjectMarshaller(new JacksonJsonObjectMarshaller<>())
.resource(new ClassPathResource("trades.json"))
.name("tradeJsonFileItemWriter")
.build();
}
实际输出:
[
{name="abc", id="1"},
{name="abcd", id="2"}
]
预期:
[
{
name="abc",
id="1"
},
{
name="abcd",
id="2"
}
]
因为我们没有任何选项可以将漂亮的打印添加到默认 JacksonJsonObjectMarshaller
我已经实现了我自己的 JacksonJsonObjectMarshaller
并向它添加了漂亮的打印选项。
public String marshal(T item) {
try {
ObjectWriter objectWriter = objectMapper.writer().withDefaultPrettyPrinter();
return objectWriter.writeValueAsString(item);
} catch (JsonProcessingException e) {
throw new ItemStreamException("Unable to marshal object " + item + " to Json", e);
}
}
另一个选项:
使用漂亮的打印选项创建新的 ObjectMapper,然后将其传递给 JacksonJsonObjectMarshaller
。
ObjectMapper objectMapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
return new JsonFileItemWriterBuilder<Trade>()
.jsonObjectMarshaller(new JacksonJsonObjectMarshaller<>(objectMapper))
.resource(new ClassPathResource("trades.json"))
.name("tradeJsonFileItemWriter")
.build();