java - 从自定义序列化程序访问字段注释

标签 java jackson

我正在使用一个遗留系统,其中数据基本上以非规范化格式保存。更糟糕的是,没有使用一致的命名约定。以下面的对象为例,它基本上包含两个地址(但可能更多):

{
   "studentAddress": "123 new Street",
   "studentCity": "New City",
   "studentState_w": "NY",
   "studentZip": "11220",
   "teacherAddress:: "424 main st",
   "teacherCity_txt": "Summerville",
   "teacherState_x" : "NJ",
   "teacherZip": "13454",
   ...
   ...
}

我想对以下对象进行序列化/反序列化:

public class SomeData {    
    Address teacher;
    Address student;

    public static class Address {
       String address;
       String city;
       String state;
       String zipcode;
    }
}

我的想法是像这样创建一个自定义注释 AddressMapper:

public @interface AddressMapper {
    String addressField () default "address",
    String cityField () default "city",
    String stateField () default "state",
    String zipField () default "zipcode"
} 

然后像这样在类上使用它:

public class SomeData {
    @AddressMapper (addressField="teacherAddress", cityField="teacherCity_txt", stateField="studentState_w", zipField="teacherZip")    
    @JsonSerialize(using = AddressSerializer.class)
    Address teacher;
    @AddressMapper (addressField="studentAddress", cityField="studentCity", stateField="studentState_w", zipField="studentZip")   
    @JsonSerialize(using = AddressSerializer.class)
    Address student; 
}

但是,我找不到从序列化方法中获取@AddressMapper 注释的方法

public class AddressMapper extends JsonSerializer<Address> {
    public void serialize(Address value, JsonGenerator jgen, SerializerProvider provider) {
        //How to i get field annotation????
    }
}

这里如何获取字段注解的实例?还有其他方法可以解决这个问题吗?

最佳答案

实现此目的的方法是实现 ContextualDeserializer 来读取注释。可以在 jackson 的测试用例中找到这样的示例: https://github.com/FasterXML/jackson-databind/blob/master/src/test/java/com/fasterxml/jackson/databind/contextual/TestContextualSerialization.java

但是,反序列化对象将具有挑战性。

关于java - 从自定义序列化程序访问字段注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20809975/

相关文章:

java - Java 中有用于哈希的 hexToString 实现方法吗?

java - 如何在破解原始 jar 文件后重新创建 jar 文件?

java - Java中使用%n或\n格式化字符串

java - NoClassDefFound错误: org/codehaus/stax2/ri/Stax2WriterAdapter using jackson

spring-mvc - Jodatime/Spring MVC/ jackson |日期时间格式问题

android - FasterXML Jackson ObjectMapper for .Net MVC4 JSON POST 结果类型对象

java - 线程中的异常 "main"java.lang.IllegalStateException : The driver executable does not exist while running Selenium Test on Ubuntu

java - 通过Shell脚本运行Java程序时遇到的一些问题

java - Spring MVC,反序列化单个 JSON?

java - 为什么 jackson 这么慢?