java - REST、MVC - 资源的链接创建应该在哪一层发生?
问题描述
以下是我的场景的一个抽象案例。
在通过端点GET
发出请求后,Controller中的调用来自Service的函数,该函数返回具有指定 id 的 。之后,在Controller中,将收到的内容转换为./customers/:id
Request Handler
Customer
Customer
CustomerResourceDTO
@GetMapping("customers/{id}")
public ResponseEntity<CourseResourceDTO> getSingleCustomer(@PathVariable int id) {
Customer customer = customerService.getSingleCustomer(id);
CustomerResourceDTO customerResourceDTO = new CustomerResourceDTO(customer);
return new ResponseEntity<>(courseResourceDTO, HttpStatus.OK);
}
在CustomerResourceDTO
构造函数中,还创建了链接。
@Getter @Setter
public class CustomerResourceDTO extends ResourceSupport {
String firstName;
String lastName;
public CustomerResourceDTO (Customer customer) {
this.firstName = customer.firstName;
this.lastName = customer.lastName;
add(new Link("https://linkToSelf").withSelfRel());
}
}
在 DTO/资源创建中设置链接是一种好习惯,还是应该将其委托给另一个类/层?
解决方案
从丰富的领域模型的角度来看;我向我的 DTO添加了以下方法,这些方法扩展了ResourceSupport :addSelfLink
和addLink
(添加到另一个资源的链接),否则,在我看来,它们应该在Service中找到一个位置并在Controller中调用。
推荐阅读
- firebase - 在 Firebase 控制台中,时间值意味着什么?
- python - 如何逐元素应用二进制交叉熵,然后在 Keras 中对所有这些损失求和?
- mysql - 如何使用数据文件夹中的数据恢复我的 InnoDB 表?
- c++ - 在 C++ 类中访问 C 风格的回调
- react-native - 使用图像图标反应本机选择器
- sql - SQL - 在 sql 中将数据类型 varchar DD/MM/YYYY 转换为日期格式
- java - 在 Java 中使用的最快和最节省内存的 BZip2 解压缩工具是什么
- regex - 正则表达式不应以字符开头并包含序列
- macos - Safari 对话框未在自动浏览器实例中打开
- asp.net-mvc - 如何将基于位置的订单分配给 WordPress (WooCommerce) 上的特定用户?