diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/infrastructure/item/file/mapping/JsonLineMapper.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/infrastructure/item/file/mapping/JsonLineMapper.java
index 8248707e28..1bf1b7798d 100644
--- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/infrastructure/item/file/mapping/JsonLineMapper.java
+++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/infrastructure/item/file/mapping/JsonLineMapper.java
@@ -15,15 +15,17 @@
*/
package org.springframework.batch.infrastructure.item.file.mapping;
+import java.lang.reflect.Type;
import java.util.Map;
+import tools.jackson.core.type.TypeReference;
import tools.jackson.databind.json.JsonMapper;
import org.springframework.batch.infrastructure.item.file.LineMapper;
/**
- * Interpret a line as a JSON object and parse it up to a Map. The line should be a
- * standard JSON object, starting with "{" and ending with "}" and composed of
+ * Interpret a line as a JSON object and parse it up to provided target type. The line
+ * should be a standard JSON object, starting with "{" and ending with "}" and composed of
* name:value pairs separated by commas. Whitespace is ignored, e.g.
*
*
@@ -38,37 +40,96 @@
*
* @author Dave Syer
* @author Mahmoud Ben Hassine
+ * @author Yanming Zhou
*
*/
-public class JsonLineMapper implements LineMapper