簡體   English   中英

多個 DTO 手動初始化

[英]Multiple DTOs manual initialize

在微服務中,我們將多個 dto 數據發布為字符串 json。

Controller:

@RequestMapping(value="/json",method = RequestMethod.POST)
public String getjson(@RequestBody String json) {

   ///Service process
}

發布 Json:

{
"dtos":{
    "Dto1":{   
        "name":"Dto1 Name Field",
        "filter":[
            {"key":"f1","value":1},
            {"key":"f2","value":10}
        ]
    },
    "Dto2":{
        "city":"Newyork",    
        "filter":[
            {"key":"f1","value":1},
            {"key":"f2","value":10},
    {"key":"f3","value":10}
        ]
    }
},
"page":1
}

DTO:

public class Dto1{
   private String name;
}
public class Dto2{
   private String city;
}

Dto1 和 Dto2 是 java DTO object 名稱。 如何將字符串 json 轉換為 java 對象?

您可以創建一個新的 DTO,其中包含所有 attrs 並在請求中接收:

public class Filter{
    private String key;
    private int value;
}

public class Dto1{
    private String name;
    private List<Filter> filter;
}

public class Dto2{
    private String city;
    private List<Filter> filter;
}

public class Dtos{
    public Dto1 dto1;
    public Dto2 dto2;
}

public class DtoToReceiveInRequest{
    private Dtos dtos;
    private int page;
}

Controller

@PostMapping
public String getjson(@RequestBody DtoToReceiveInRequest json) {

   ///Service process
}

您可以使用 jackson 庫中的 ObjectMapper,如下所示。

String json = "";
ObjectMapper objectMapper = new ObjectMapper();
Dto1 dto = objectMapper.readValue(json, Dto1.class);

但是在您的特定示例中,您不必有兩個 DTO 類。 您可以將值封裝在一個 DTO 中,並以 json 格式列出該 DTO 的不同實例。

注意。 json 字符串應該是您要檢索的首選 class 的表示,例如 Dto1.java。

暫無
暫無

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

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