我有一个使用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问题 支持可插入的策略;投票可能有助于说服开发人员增加支持。正如我在评论中提到的那样,可以覆盖内部行为,但这并不是一件简单的事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top