私たちはバックエンドでcamelCasedプロパティを出力するAPIを消費し、これを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;
}
}
それは動作しますが、私は私達の入力があるので、それは非常にエレガントではないと思います常にキャメルケースと出力は常にsnakecaseです。 JSONシリアライゼーションをsnakecaseにグローバルに設定し、jackelのcamelcaseにデシリアライズする方法はありますか?
乾杯