【问题标题】:Spring Rest Does DTOs can be BiDirectional?Spring Rest DTO 可以是双向的吗?
【发布时间】:2020-04-24 22:21:05
【问题描述】:

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

疑点1:

class UserDTO {
    long id;
    String name;
    int age;

    // getters and setters
}

案例1:

public void doSomethng(@RequestBody UserDTO userDTO){
    repository.findById(userDTO.getId());
}

案例2:

public void doSomethng(@RequestBody long id){ //Is this correct?
    repository.findById(id);
}

案例3:

public void doSomethng(@RequestBody Map<Long, Object> map){ //Is this correct?
    repository.findById(map.get("id"));
}

我实际上只需要为 POST 请求传递“id”。

那么,在以上 3 种情况中,哪一种是好的做法?对我来说,long id 似乎是合理的。我不明白,在什么情况下将 Map 作为 RequestBody 比 DTO 好得多?

疑点2:

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

class UserDTO {
    long id;
    List<OrderDTO> orders;
}

class OrderDTO {
    long orderId;
    UserDTO userDTO;
}

【问题讨论】:

  • 仍在寻找答案..

标签: spring spring-boot rest spring-mvc oop


【解决方案1】:

那么,在以上 3 种情况中,哪一种是好的做法?对我来说,long id 似乎是合理的。我不明白,在什么情况下将 Map 作为 RequestBody 比 DTO 好得多?

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

@GetMapping(value="find/{id}")
public void find(@PathVariable Long id) {
    repository.findById(map.get("id"));
}

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

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

我认为使用双向 DTO 没有问题,因为它们只是在应用程序中转换您的请求/响应数据的一种方式。如果它们是双向实体,那么序列化将是一个问题。

希望这会有所帮助!

【讨论】:

  • 您好,谢谢您的回答。你实际上没有得到我的 Query1.. 我的 Query 与 POST 相关..
  • 哦,好吧..你能解释一下吗...我会尽力提供相应的帮助。
猜你喜欢
  • 2018-01-21
  • 2011-09-25
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多