bhi*_*rom 5 java json spring-mvc naming-conventions jackson
我有一个使用Spring MVC创建和处理多个REST端点的项目.我目前正致力于使用Jackson自动处理使用@RequestBody和@ResponseBody注释的JSON的分类/反序列化.
我让杰克逊工作了,所以我有一个起点.我的问题是我们的旧序列化是手动完成的,并使用Pascal套管而不是Camel套管("MyVariable"而不是"myVariable"),杰克逊默认使用Camel套管.
我知道我可以使用手动更改变量的名称@JsonProperty.话虽如此,我不认为增加@JsonProperty所有变量是一个可行的长期解决方案.
除了使用@JsonProperty注释之外,有没有办法让Jackson在序列化和反序列化时使用Pascal大小写?
编辑:看起来外部没有干净的方法.有几个人建议覆盖不同的课程,以此来实现我的目标.我愿意接受有关我可以改写的改变套管的建议.目前我已经制作了一个自定义的ObjectMapper,它设置了我想要的一些属性(即Inclusion.NON_NULL).我还没有找到任何可以让我改变套管行为的地方.有什么想法吗?
我最终通过覆盖(反)序列化器解决了这个问题。对于有兴趣的人,您可以按照以下步骤自己操作:
步骤 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)方法。name对您在自定义 .txt 文件中所做的参数执行相同的操作BeanSerializerFactory。
步骤 3. 创建一个ObjectMapper.
将序列化器工厂设置为您的自定义 bean 序列化器工厂。设置反序列化器提供程序(我使用了这一行:)objectMapper.setDeserializerProvider(new StdDeserializerProvider(new CustomJacksonBeanDeserializerFactory()))。
就是这样。在序列化或反序列化 JSON 时,您ObjectMapper创建的将使用新的命名方案。
| 归档时间: |
|
| 查看次数: |
2145 次 |
| 最近记录: |