JSON чехол со змеей для библиотечного класса
У меня есть класс, который расширяет некоторый класс библиотеки. Как сделать расширение свойств класса на случай верблюда.
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
class Test extends Abc {
}
// Library class which I can't modify
class Abc {
private firstName;
}
Как сделать firstName как first_name
1 ответ
Вы можете использовать миксин. По сути, вы определяете свою аннотацию для другого класса, а затем связываете реальный класс со своим миксином в объектном объекте
public class JacksonMixin {
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
abstract class MixinAbc{}
// Library class which I can't modify
class Abc {
private String firstName;
}
@Test
public void testMixin() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.addMixIn(Abc.class, MixinAbc.class);
Abc value = new Abc();
value.firstName="bill";
String writeValueAsString = objectMapper.writeValueAsString(value);
Assert.assertEquals("{\"first_name\":\"bill\"}", writeValueAsString);
}
}
edit: addMixInAnnotation устарела, теперь это просто addMixIn.