如何使用Jackson添加反序列化器来反序列化具有特定名称的String类型字段的值?

时间:2012-11-13 23:12:57

标签: java json jackson

1-有没有办法向模块或ObjectMapper添加反序列化器,以便反序列化具有特定名称或正则表达式模式的所有字段? (例如,所有符合.*url.*模式的字段?

2-是否可以注册一个解串器,该解串器被用于反序列化具有与特定正则表达式模式匹配的值的所有字段? (例如http://.+)。

3-或者是否有一个我可以在课堂上使用的注释,而不是用ObjectMapper注册,可以用来代替1和2?

2 个答案:

答案 0 :(得分:0)

您可以注册一个bean序列化自定义程序,用于检查bean的属性,应用正则表达式,并根据需要安装自定义序列化程序。

引用Tatu:

  

扩展点是添加BeanSerializerModifier,它   你可以通过模块实现来做。 SimpleModule不添加   方便的方法,所以你需要实现   Module#setupModule(),调用'addBeanSerializerModifier'。

反序列化方面有一个并行结构。

答案 1 :(得分:0)

对于(1)和(2),没有。

对于3,您可以覆盖指定的序列化程序或反序列化程序以用于属性,其中包含:

public class POJO {
  @JsonSerialize(using=MySerializer.class)
  public String text;
}

您可以为(1)做的只是注册String.class的自定义序列化程序,并将其定义为ContextualSerializer。当调用其createContextual()方法时,您可以检查它用于哪个属性;如果name与你的正则表达式匹配,你可以构造另一个String序列化器;如果没有,只需调用JsonGenerator.writeString()的简单。

对于(2),您只需定义自定义String序列化程序并在序列化期间比较值,并采取适当的措施。

相关问题