[英]How to map single entity with two different node in requestbody in springboot
我正在使用 springboot 應用程序,我想要 map 請求主體用戶具有字段 billingAddress 和 shippingAddress。 我已經定義了下面給出的單個地址 class。 請求正文如下。 我將如何定義映射器以便可以輕松轉換請求主體? 我不想定義單獨的 billingAddress 和 shippingAddress class。
Json 請求:
{
"data": {
"billing_information": {
"billing_first_name": "John",
"billing_last_name": "Doe",
"billing_address_line1": "1295 Charleston Road",
"billing_address_line2": "Apt 1",
"billing_city": "Mountain View",
"billing_province": "CA",
"billing_postal_code": "94043",
"billing_country": "US"
},
"shipping_information": {
"shipping_first_name": "John",
"shipping_last_name": "Doe",
"shipping_address_line1": "1295 Charleston Road",
"shipping_address_line2": "Apt 1",
"shipping_city": "Mountain View",
"shipping_province": "CA",
"shipping_country": "US",
"shipping_postal_code": "94043"
}
}
}
地址.java:
public class Address {
private String firstName;
private String lastName;
private String addressLne1;
private String addressLne2;
private String city;
private String province;
private String postalCode;
private String country;
}
用戶.java:
public class User {
private Address billingAddress;
private Address shippingAddress;
}
Controller.java:
@RestController
public class Controller {
@PostMapping("/user")
public String user(@RequestBody User request) {
return "success";
}
}
首先,JSON 的根節點有一個屬性“數據”,您可以使用@JsonTypeName
,另一種方法是使用@JsonProperty
到映射器字段創建包裝器 class 和 map
然后你可以使用@JsonProperty
注釋 map 賬單地址和送貨地址
@JsonTypeName("data")
@JsonTypeInfo(include= JsonTypeInfo.As.WRAPPER_OBJECT,use= JsonTypeInfo.Id.NAME)
class User {
@JsonProperty("billing_information")
private Address billingAddress;
@JsonProperty("shipping_information")
private Address shippingAddress;
// getters and setters
}
最后,由於Address
model 字段需要映射到 2 個不同的 JSON 屬性,我們可以使用@JsonAlias
設置別名。
class Address {
@JsonProperty("billing_first_name")
@JsonAlias({"shipping_first_name"})
private String firstName;
@JsonProperty("billing_last_name")
@JsonAlias({"shipping_last_name"})
private String lastName;
@JsonProperty("billing_address_line1")
@JsonAlias({"shipping_address_line1"})
private String addressLne1;
...
// getters and setters
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.