在Spring MVC中使用Jackson Json时,如何默认启用Pascal套管?
-
10-10-2019 - |
题
我有一个使用Spring MVC创建和处理多个休息端点的项目。我目前正在努力使用Jackson自动处理JSON的静脉化/挑选性 @RequestBody
和 @ResponseBody
注释。
我让杰克逊工作了,所以我有一个起点。我的问题是,我们的旧序列化是手动完成的,并使用了帕斯卡套管,而不是骆驼壳(“ myvariable”而不是“ myvariable”),而杰克逊(Jackson)则默认情况下骆驼壳。
我知道我可以使用 @JsonProperty
. 。话虽这么说,我不考虑添加 @JsonProperty
对于我所有的变量,是可行的长期解决方案。
有没有办法使杰克逊在序列化和审理时使用帕斯卡套管,而不是使用 @JsonProperty
注解?
编辑:看来没有一种干净的方式可以在外部进行此操作。几个人建议推荐不同的班级,以实现我的目标。我愿意就可以改变套管的覆盖能力的建议。目前,我制作了一个自定义的对象拍摄器,该镜头设置了我想要的一些属性(即 Inclusion.NON_NULL
)。我还没有找到任何可以让我改变套管行为的地方。有什么想法吗?
解决方案 2
我最终通过覆盖(DE)序列化的序列化解决了问题。对于感兴趣的人,您可以自己做到这一点:
步骤1.扩展 BeanSerializerFactory
.
覆盖 _constructWriter(SerializationConfig config, TypeBindings typeContext, PropertyBuilder pb, boolean staticTyping, String name, AnnotatedMember propertyMember)
方法。在该方法中,修改 name
无论如何,您都认为合适。为了实施帕斯卡壳,我使用了这一行: String formattedName = name.substring(0, 1).toUpperCase() + name.substring(1);
. 。修改后 name
, , 称呼 super._constructWriter
.
步骤2.扩展 BeanDeserializationFactory
.
覆盖 constructSettableProperty(DeserializationConfig config, BasicBeanDescription beanDesc, String name, AnnotatedMethod setter)
方法。与 name
您在自定义内部执行的参数 BeanSerializerFactory
.
步骤3.创建一个 ObjectMapper
.
将序列化工厂设置为您的自定义Bean Serializer Factory。设置Deserializer提供商(我使用此行: objectMapper.setDeserializerProvider(new StdDeserializerProvider(new CustomJacksonBeanDeserializerFactory()))
).
而已。这 ObjectMapper
您创建的时将使用新的命名方案在序列化或进行序列化JSON时。
其他提示
看 http://www.cowtowncoder.com/blog/archives/2011/03/entry_448.html如果您可以等待1.8,它将包含在其中。
对于它的价值,有一个 Jira问题 支持可插入的策略;投票可能有助于说服开发人员增加支持。正如我在评论中提到的那样,可以覆盖内部行为,但这并不是一件简单的事情。