簡體   English   中英

如何在springboot的requestbody中使用兩個不同節點的map單個實體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM