如何解决Jackson (JSON) 使用 ObjectMapper 和 PolymorphicTypeValidator 在没有标签的情况下使用 ArrayList 解析 Map 的问题
我已经阅读了很多关于 JSON 解析的帖子,但仍然试图解决传递 java.util.HashMap 的错误,该 java.util.HashMap 包含一个其中包含 java.util.ArrayList 的类。我最终将其传递给 JBPM。我一直在尝试避免使用标签来避免在 Business Central 中添加另一个依赖项(尽管 Business Central 可能也需要此信息来进行 JSON 解析。
更具体地说,我有一个带有 POJO 和 2 个类的项目:
public class AmsUsers {
private List<AmsUser> peoplePayload;
...
public class AmsUser {
private String id;
private String firstName;
private String lastName;
...
这个项目是我的客户端的传递依赖项,在我的项目中称为 RESTProject,它对 JBPM 进行 REST 调用。 JBPM 导入对象模型项目。当我通过 JUnit 调用我的 REST 客户端时:
private static ObjectMapper mapper = new ObjectMapper();
...
PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder().build();
mapper.activateDefaultTyping(ptv,ObjectMapper.DefaultTyping.NON_CONCRETE_AND_ARRAYS);
URIBuilder ub = new URIBuilder(url);
AmsUser u1 = new AmsUser("my id"....);
AmsUser u2 = new AmsUser("second id"....);
ArrayList<AmsUser> names = new ArrayList<AmsUser>();
names.add(u1);
names.add(u2);
AmsUsers users = new AmsUsers();
users.setPeoplePayload(names);
hash.put(MAP_USERS_ASSIGNING_KEY,users);
String hashMapString = mapper.writeValueAsString(hash);
我记录了以下内容:
handling map of parameters for {
"people":["com.goprecise.ams.AmsUsers",{"peoplePayload":["java.util.ArrayList",[
{"id":"AA8E0125-EED9-4682-0000-5BAA665FC2F7","firstName":"D",.... },{"id":"AA8E0125-EED9-4682-0001-5BAA665FC2F7","firstName":"David",... }
]]}]}
could not parse map Unexpected token (START_OBJECT),expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRAY type information for class java.util.Map
如何让 ArrayList 中的类传递以指示它是 AmsUser 的 ArrayList,没有注释或自定义代码?我是否需要只接受对类进行注释(这会在 Business Central 中添加依赖项,但也可以帮助进行 JSON 解析)?如果是这样,我应该使用哪些注释?谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。