杰克逊反序列化POJO
我有一个POJO,看起来像这样:杰克逊反序列化POJO
public class LdapUserImpl implements LdapUser
{
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 1L;
/** The action. */
private String action;
private Map<String, String> translation;
/** The fields. */
private List<Map<String, String>> fields;
public LdapUserImpl()
{
/* nothing special needed */
}
/** {@inheritDoc} */
@Override
public String getAction()
{
return action;
}
/** {@inheritDoc} */
@Override
public Map<String, String> getTranslation()
{
return translation;
}
/** {@inheritDoc} */
@Override
public List<Map<String, String>> getFields()
{
return fields;
}
/** {@inheritDoc} */
@Override
public void setAction(String action)
{
this.action = action;
}
/** {@inheritDoc} */
@Override
public void setTranslation(Map<String, String> translation)
{
this.translation = translation;
}
/** {@inheritDoc} */
@Override
public void setFields(List<Map<String, String>> data)
{
this.fields = data;
}
}
因此,它基本上包含了字符串,一个地图和列表。
,当我尝试读取这个JSON:
[
{
'action': 'New User',
'translation':
{
'key': 'ldap.action.new',
'value': 'ldap.action.new'
},
'fields':
[
{
'emailAddress': 'email',
'changed': 'false'
},
{
'enabled': 'TRUE',
'changed': 'false'
},
{
'firstName': 'First',
'changed': 'false'
},
{
'lastName': 'Last',
'changed': 'false'
},
{
'name': 'FirstL',
'changed': 'false'
}
]
},
{
'action': 'New User',
'translation':
{
'key': 'ldap.action.new',
'value': 'ldap.action.new'
},
'fields':
[
{
'emailAddress': 'email2',
'changed': 'false'
},
{
'enabled': 'TRUE',
'changed': 'false'
},
{
'firstName': 'First2',
'changed': 'false'
},
{
'lastName': 'Last2',
'changed': 'false'
},
{
'name': 'FirstL2',
'changed': 'false'
}
]
}
]
本办法:
CollectionType typeReference = TypeFactory.defaultInstance().constructCollectionType(List.class, LdapUser.class);
List<LdapUser> ldapUser = objectMapper.readValue((String) data.get(RESULT_DATA), typeReference);
如果你想知道为什么我投data.get到字符串那是因为我得到JSON作为Map<String, Object>
但只能转换为字符串,因为铸造别的东西导致异常大部分的时间。
我收到这样看起来异常:
“messageKey”: “com.fasterxml.jackson.databind.JsonMappingException”, “消息”:“无法构建com.company.api实例.data.authn.LdapUser,提出问题:抽象类型要么需要被映射到具体的类型,具有自定义串并转换器,或在[来源与另外类型的信息\ n被实例:{JSON}(通过参考链:java.util.ArrayList中[0])“, ”returnType“:”致命“
对象LdapUser i可序列化,所以我没有得到杰克逊对我说的问题。
您的typeReference
使用。
这里需要用一个具体类型一样LdapUserImpl.class
,因为接口没有字段或方法的实现,所以它不能读取你的getter和setter方法。
好了,所以他本身并不检索标准执行? – Nico
没有“标准实行”一个接口。你自己写的... –
'LdapUser'是一个接口,而不是一个'具体type',因为错误状态 –