首页 > 解决方案 > REST、MVC - 资源的链接创建应该在哪一层发生?

问题描述

以下是我的场景的一个抽象案例。

在通过端点GET发出请求后,Controller中的调用来自Service的函数,该函数返回具有指定 id 的 。之后,在Controller中,将收到的内容转换为./customers/:idRequest HandlerCustomerCustomerCustomerResourceDTO

    @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/资源创建中设置链接是一种好习惯,还是应该将其委托给另一个类/层?

标签: javaspringmodel-view-controllerdto

解决方案


从丰富的领域模型的角度来看;我向我的 DTO添加了以下方法,这些方法扩展了ResourceSupport :addSelfLinkaddLink(添加到另一个资源的链接),否则,在我看来,它们应该在Service中找到一个位置并在Controller中调用。


推荐阅读