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