Jackson包含一个core JAR,和两个依赖core JAR的JAR:
Jackson Core
Jackson Annotations
Jackson Databind
其中Jackson Annotations依赖Jackson Core,Jackson Databind依赖Jackson Annotations。
这三个JAR可以从Maven中央仓库下载,然后放在CLASSPATH中,也可以用Maven配置:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson-version}</version>
</dependency>
//配置为true表示mapper接受只有一个元素的数组的反序列化
objectMapper.configure(Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
//配置为false表示mapper在遇到mapper对象中存在json对象中没有的数据变量时不报错,可以进行反序列化
objectMapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//新版的jackson设置mapper的方法,功能同上
objectMapper.getDeserializationConfig().without(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);
//定义针对日期类型的反序列化时的数据格式
objectMapper.getDeserializationConfig().setDateFormat(new
SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
Jackson处理一般的JavaBean和Json之间的转换只要使用ObjectMapper 对象的readValue和writeValueAsString两个方法就能实现。但是如果要转换复杂类型Collection如 List<YourBean>,那么就需要先反序列化复杂类型 为泛型的Collection Type。
如果是ArrayList<YourBean>那么使用ObjectMapper 的getTypeFactory().constructParametricType(collectionClass, elementClasses);
如果是HashMap<String,YourBean>那么 ObjectMapper 的objectMapper.getTypeFactory().constructParametricType(HashMap.class,String.class, YourBean.class);
也可以使用下面的方式
String jsonString="[{'id':'1'},{'id':'2'}]";
ObjectMapper mapper = new ObjectMapper();
List<Bean> beanList = mapper.readValue(jsonString, new TypeReference<List<Bean>>() {});