SpringBatch:如何设置FlatFileItemReader来读取json文件?
我目前的做法是:SpringBatch:如何设置FlatFileItemReader来读取json文件?,spring,spring-boot,spring-batch,Spring,Spring Boot,Spring Batch,我目前的做法是: @Bean FlatFileItemReader<Blub> flatFileItemReader() { FlatFileItemReader<Blub> reader = new FlatFileItemReader<>(); reader.setResource(new FileSystemResource("test.json")); JsonLineMapper lineMapper = new Json
@Bean
FlatFileItemReader<Blub> flatFileItemReader() {
FlatFileItemReader<Blub> reader = new FlatFileItemReader<>();
reader.setResource(new FileSystemResource("test.json"));
JsonLineMapper lineMapper = new JsonLineMapper();
reader.setLineMapper(lineMapper);
return reader;
}
@Bean
FlatFileItemReader FlatFileItemReader(){
FlatFileItemReader=新的FlatFileItemReader();
setResource(新文件系统资源(“test.json”);
JsonLineMapper lineMapper=新的JsonLineMapper();
reader.setLineMapper(lineMapper);
返回读取器;
}
挑战是:
reader.setLineMapper()
无法使用JsonLineMapper
。如何正确使用JsonLineMapper
?创建一个类BlubJsonLineMapper
public class BlubJsonLineMapper implements LineMapper<Blub> {
private ObjectMapper mapper = new ObjectMapper();
/**
* Interpret the line as a Json object and create a Blub Entity from it.
*
* @see LineMapper#mapLine(String, int)
*/
@Override
public Blub mapLine(String line, int lineNumber) throws Exception {
return mapper.readValue(line, Blub.class);
}
}
公共类BlubJsonLineMapper实现LineMapper{
私有对象映射器映射器=新对象映射器();
/**
*将该行解释为Json对象并从中创建Blub实体。
*
*@see LineMapper#mapLine(字符串,int)
*/
@凌驾
公共Blub映射行(字符串行、整数行号)引发异常{
返回mapper.readValue(行,Blub.class);
}
}
然后可以在FlatFileItemReader中设置
@Bean
FlatFileItemReader<Blub> flatFileItemReader() {
FlatFileItemReader<Blub> reader = new FlatFileItemReader<>();
reader.setResource(new FileSystemResource("test.json"));
BlubJsonLineMapper lineMapper = new BlubJsonLineMapper();
reader.setLineMapper(lineMapper);
return reader;
}
@Bean
FlatFileItemReader FlatFileItemReader(){
FlatFileItemReader=新的FlatFileItemReader();
setResource(新文件系统资源(“test.json”);
BlubJsonLineMapper lineMapper=新的BlubJsonLineMapper();
reader.setLineMapper(lineMapper);
返回读取器;
}
如何设置FlatFileItemReader来读取json文件
这取决于json文件的格式:
1.每一行都是一个json对象(称为)
例如:
{object1}
{object2}
[
{object1},
{object2}
]
那么您有两个选择:
- 1.1使用
,它返回一个JsonLineMapper
。在这种情况下,读者还应该返回Map
,您可以使用项目处理器将项目从Map
转换为Map
(顺便说一句,将数据从一种类型转换为另一种类型是项目处理器的典型用例)Blub
- 1.2使用基于Jackson或Gson或任何其他库的
自定义实现(如@clevertension的答案所示)LineMapper
{object1}
{object2}
[
{object1},
{object2}
]
然后,您可以使用我们在4.1.0.M1版中引入的新的jsonitmreader
(参见博客文章中的示例:)
这里有一些与此类似的问题,我在这里添加它们以供参考:
Ty谢谢你的回答!有没有一种方法可以使用JsonLineMapper而不实现自己的LineMapper?JsonLineMapper是将everyline json转换为Map,但您的要求是转换为Blub,您可以使用匿名类在flatFileItemReader()中实现LineMapper{…}我正在摆弄格式1。你建议哪种选择最好?我完全是Spring batch的新手,我一直在琢磨如何正确操作。互联网上似乎没有一个完整的例子,除了这个和其他几个堆栈答案。是否所有读取JSON的批处理编码器都是专业的到目前为止,我已经能够编写以下代码:
public类DbsnpJsonItemReader扩展FlatFileItemReader{public DbsnpJsonItemReader(文件文件){Resource Resource=new gziplazyrource(文件);setResource(资源);setLineMapper(new JsonLineMapper());}