首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >春季Rest DTO可以是BiDirectional吗?

春季Rest DTO可以是BiDirectional吗?
EN

Stack Overflow用户
提问于 2020-04-24 22:21:05
回答 1查看 207关注 0票数 0

我对Spring非常陌生。几个疑问:

DOUBT1:

代码语言:javascript
复制
class UserDTO {
    long id;
    String name;
    int age;

    // getters and setters
}

CASE1:

代码语言:javascript
复制
public void doSomethng(@RequestBody UserDTO userDTO){
    repository.findById(userDTO.getId());
}

CASE2:

代码语言:javascript
复制
public void doSomethng(@RequestBody long id){ //Is this correct?
    repository.findById(id);
}

CASE3:

代码语言:javascript
复制
public void doSomethng(@RequestBody Map<Long, Object> map){ //Is this correct?
    repository.findById(map.get("id"));
}

实际上我只需要为POST请求传递"id“.

那么,在以上三个案例中,哪个是好的做法呢?对我来说长时间的证明似乎是合理的。我不明白,在哪些情况下,将Map作为RequestBody传递比DTO?要好得多

DOUBT2:

我目前正在使用DTO作为BiDirectional。所以,使用双向DTO是正确的吗?我会面临以下DTO设计的任何问题吗?

代码语言:javascript
复制
class UserDTO {
    long id;
    List<OrderDTO> orders;
}

class OrderDTO {
    long orderId;
    UserDTO userDTO;
}
EN

回答 1

Stack Overflow用户

发布于 2020-04-25 04:43:33

那么,在以上三个案例中,哪个是好的做法呢?对我来说长时间的证明似乎是合理的。我不明白,在哪些情况下,将Map作为RequestBody传递要比DTO好得多?

对于上述情况,由于您只需要id字段,并且希望在其基础上执行搜索,我的建议是对其使用@PathVariable。见下面的例子:

代码语言:javascript
复制
@GetMapping(value="find/{id}")
public void find(@PathVariable Long id) {
    repository.findById(map.get("id"));
}

此外,对于微不足道的有效负载,应该考虑Map。如果负载有一个复杂的结构,有许多嵌套的JSON对象,那么应该使用DTO。

我目前正在使用DTO作为BiDirectional。所以,对DTO使用双向技术是正确的吗?我是否会面临以下DTO设计的任何问题?

我不认为使用双向DTO有什么问题,因为它们只是在应用程序中转换请求/响应数据的一种方法。如果它们是双向实体,则会出现问题w.r.t序列化。

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61418300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档