簡體   English   中英

將 JSON 映射到 DTO

[英]Mapping JSON to DTO

我有一個名為 User 的 DTO,其中包含 userFirstName,userLastName 字段。此外,我還有一個名為 UserEntity 的實體,其中包含字段 id、userFirstName、userLastName。我的 JSON 有效負載中沒有 id 字段,因為它將自動生成,那么如何JSON 字段映射到 UserDTO。我也無法從 UserDTO 中刪除 id 字段,因為我使用相同的 userDTO 類來顯示需要在 JSON 中顯示 id 屬性的用戶列表。如何使用相同的 USERDTO 類對於 POST 和 GET 請求類型,在 POST 請求中,我們不在 JSON 正文中發送 id 屬性,而在 GET 響應中,我們需要 id 屬性我的實體類:

    @Entity
    @Table(name = "usr")
    public class User implements Serializable {
    public User() {
     }

     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "id")
     private Long id;

     @Column(name = "firstName")
     private String userFirstName;

     @Column(name = "lastName")
     private String userLastName;


    // fields with getters / setters for all the fields.
     }

我的 DTO 類公共類 UserDTO {

       private Long id;

       private String userFirstName;

       private String userLastName;
      }

JSON POST 請求:

  {
  "userFirstName":"testuserFirstName",
  "userLastName":"testuserLastName",

   }

這是當我們對用戶列表執行 GET 請求時我想看到的響應:

  {
   "id":1,
  "userFirstName":"testuserFirstName",
  "userLastName":"testuserLastName",

   }

POST 請求的控制器類方法中的代碼片段

          UserDTO requestPayloadData = gson.fromJson(json, UserDTO.class);

You actually need different objects for the task

我認為您混淆了 DTO(數據傳輸對象)的概念,它將數據從您的業務邏輯傳輸到前端,而 DO(數據對象)則用於持久化。 所以你通常不會將 DTO 映射到 DB 列,這是 DO 的工作


另一個建議,如果你想用相同的班級完成任務。

  • 不要填充您的實體對象 USER 的id字段

當您將數據從 UserDTO 復制到 User 實體時,跳過id字段

您甚至可以刪除 User 實體中提交的idsetter (如果 ORM 沒有問題)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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