мы используем API с нашим бэкэнд, который выводит свойства camelCased, сопоставляем это с POJO, применяем некоторую бизнес-логику и затем выводим ее с помощью нашего API в некоторые приложения. Формат, который мы хотим вывести, - это свойства snake_case.Асимметричное отображение имени/свойств с помощью Jackson, более элегантное решение?
Этот тест описывает то, что мы хотим сделать:
@Test
public void mappingTest() throws IOException {
String input = "{ \"merchantId\": 23, \"contactName\": \"foobar\" }";
ObjectMapper mapper = new ObjectMapper();
Merchant merch = mapper.readValue(input, Merchant.class);
String output = mapper.writeValueAsString(merch);
String expectedOutput = "{ merchant_id: 23, contact_name: 'foobar' }";
assertEquals("", expectedOutput, output);
}
На данный момент класс модель выглядит следующим образом:
@JsonInclude(Include.NON_NULL)
public class Merchant {
private String merchantId;
private String contactName;
public Merchant() {
}
public Merchant(final String merchantId, final String contactName) {
this.merchantId = merchantId;
this.contactName = contactName;
}
@JsonProperty("contact_name")
public String getContactName() {
return contactName;
}
@JsonProperty("contactName")
public void setContactName(final String contactName) {
this.contactName = contactName;
}
@JsonProperty("merchant_id")
public String getMerchantId() {
return merchantId;
}
@JsonProperty("merchantId")
public void setMerchantId(final String merchantId) {
this.merchantId = merchantId;
}
}
Это работает, но я думаю, что это не очень элегантно, так как наш вход всегда camelcase и выход всегда snakecase. Есть ли способ глобально установить сериализацию JSON для snakecase и десериализации на camelcase для jackson? (Мы используем его вместе с RestTemplate весной, если это делает никакой разницы)
Приветствия