请考虑以下情况。我想序列化ClassA对象s.t。我为bObject
和cObject
class ClassA {
ClassB bObject = new ClassB();
ClassC cObject = new ClassC();
}
class ClassB {
ClassD dObject = new ClassD();
}
class ClassC {
ClassD dObject = new ClassD();
}
class ClassD {
int firstMember = 1;
String second_member = "Two";
}
void test() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE);
objectMapper.writerWithDefaultPrettyPrinter();
System.out.println(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(new ClassA()));
}
例如我想将PropertyNamingStrategy.UPPER_CAMEL_CASE
使用bObject
,将PropertyNamingStrategy.SNAKE_CASE
使用cObject
序列化的json应该看起来像:
{
"bObject" : {
"dObject" : {
"firstMember" : 1,
"secondMember" : "Two"
.... similarly camel case for any nested ....
}
},
"cObject" : {
"d_object" : {
"first_member" : 1,
"second_member" : "Two"
.... similarly snake case for any nested ....
}
}
}
我尝试将@JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class)
和@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
分别添加到ClassB
和ClassC
中。这样可以固定dObject
的名称,但不能固定其中的字段的名称。
有什么建议吗?如果可以使用混入或自定义序列化器和解串器?
我为什么需要这样做的上下文:我当前的POJO是classA
,它使用classB
并在我们的服务边界使用,并且正在使用某个配置进行序列化。现在,我们将ClassC
(不属于我们)添加到POJO。 classC
的序列化器/串行器需要遵循不同的约定。