在Spring MVC中使用Jackson JSON时,如何默认启用Pascal大小写?

我有一个使用Spring MVC创建和处理多个REST端点的项目。 我目前正致力于使用Jackson自动处理使用@RequestBody@ResponseBody注释的JSON的分类/反序列化。

我让jackson工作了,所以我有一个起点。 我的问题是我们的旧序列化手动完成并使用Pascal套管而不是Camel套管(“MyVariable”而不是“myVariable”),jackson默认使用Camel套管。

我知道我可以使用@JsonProperty手动更改变量的名称。 话虽这么说,我不认为将@JsonProperty添加到我的所有变量中是一个可行的长期解决方案。

除了使用@JsonProperty注释之外,有没有办法让Jackson在序列化和反序列化时使用Pascal大小写?

编辑:看起来外部没有干净的方法。 有几个人建议重写不同的课程,以此来实现我的目标。 我愿意接受有关我可以改写的改变套管的建议。 目前我已经创建了一个自定义的ObjectMapper来设置我想要的一些属性(即Inclusion.NON_NULL )。 我还没有找到任何可以让我改变套管行为的地方。 有什么想法吗?

请参阅http://www.cowtowncoder.com/blog/archives/2011/03/entry_448.html如果您可以等待1.8,那么它将包含在那里。

我最终通过覆盖(de)序列化器来解决问题。 对于那些感兴趣的人,以下是您可以自己做的事情:

步骤1.扩展BeanSerializerFactory

重写_constructWriter(SerializationConfig config, TypeBindings typeContext, PropertyBuilder pb, boolean staticTyping, String name, AnnotatedMember propertyMember)方法。 在该方法中,以您认为合适的任何方式修改name 。 为了实现Pascal大小写,我使用了这一行: String formattedName = name.substring(0, 1).toUpperCase() + name.substring(1); 。 修改name ,调用super._constructWriter

第2步。扩展BeanDeserializationFactory

重写constructSettableProperty(DeserializationConfig config, BasicBeanDescription beanDesc, String name, AnnotatedMethod setter)方法。 使用您在自定义BeanSerializerFactory执行的name参数执行相同的操作。

第3步。创建一个ObjectMapper

将序列化工厂设置为您的自定义bean序列化工厂。 设置反序列化器提供程序(我使用了这一行: objectMapper.setDeserializerProvider(new StdDeserializerProvider(new CustomJacksonBeanDeserializerFactory())) )。

而已。 您创建的ObjectMapper将在序列化或反序列化JSON时使用新的命名方案。

对于它的价值,有一个Jira问题来支持可插拔策略; 投票可能有助于说服开发者增加支持。 正如我在评论中提到的,可以覆盖内部行为,但这不是一件简单的事情。