Jackson解析json字符串是区分大小写的,如果对应的字段首字母为大写或者不好设置对应的类型,写出的get方法是获取不到json值的,那么这时候就需要添加@JsonProperty("name")注解来标注反序列化的是哪个字段。
如果反序列化的对象中包含对象或者集合,比如说Map,List等,这时候就需要自定义反序列化程序,代码如下所示:
// 对象get方法
Class<?> retType = method.getReturnType();
// 是集合对象
if ( Collection.class.isAssignableFrom(retType) )
{
Type genRetType = method.getGenericReturnType();
ParameterizedType pType = (ParameterizedType)genRetType;
Class<?> pTypeClazz = (Class<?>) pType.getActualTypeArguments()[0];
Object childPojo = objectMapper.convertValue(rowMap,pTypeClazz);
try
{
Collection<Object> vals = (Collection<Object>) method.invoke(pojo);
vals.add(childPojo);
}
catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex)
{
throw new IllegalStateException("Unable to invoke method annotated with" + idMethod );
}
}