hee*_*oir 8 java json jackson objectmapper
使用Jackson将Java对象转换为JSON
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
jsonMessage = mapper.writeValueAsString(object);
Run Code Online (Sandbox Code Playgroud)
结果是字段"参与者"(它是对象实例的一部分)
participants Arrays$ArrayList<E>
Run Code Online (Sandbox Code Playgroud)
被重命名为"participantList"
participantsList":[{"userId":"c1f9c"}]
Run Code Online (Sandbox Code Playgroud)
即"列表"附加到字段名称.我浏览了杰克逊的文档,但没有找到防止这种情况发生的方法.这可能吗?在独立项目中测试上述代码不会导致相同的结果(即不进行重命名).为什么杰克逊表现得像这样?不幸的是,对象是第三方,我无法改变它.
使用Jackson版本2.3.3(使用2.9.0验证相同的行为).
Oleksandr 的评论指出了正确的方向。事实上,Jackson 在确定 JSON 字段名称时似乎考虑了 getParticipantsList()。但是,正如我之前所写,考虑到它是第三方对象,我无法在那里进行任何更改。
但是,随着对导致问题的原因有了更好的了解,我能够想出一个解决方案:
mapper.setVisibilityChecker(mapper.getVisibilityChecker().withFieldVisibility(Visibility.ANY).withGetterVisibility(Visibility.NONE).withIsGetterVisibility(Visibility.NONE));
Run Code Online (Sandbox Code Playgroud)
或者
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
mapper.setVisibility(PropertyAccessor.GETTER, Visibility.NONE);
mapper.setVisibility(PropertyAccessor.IS_GETTER, Visibility.NONE);
Run Code Online (Sandbox Code Playgroud)