从@RestController返回@Entity而不是DTO时有什么陷阱吗?

J.J*_*eam 0 java spring spring-mvc spring-boot spring-restcontroller

从 @RestController 返回 @Entity 而不是 DTO 时是否有任何陷阱?像这样:

    @RestController
    public class EmployeeRestController {
    
        @Autowired
        private EmployeeRepository repository;
        
        @GetMapping("/rest/employee/get/{id}")
        public Employee getEmployeeByID(@PathVariable("id") int id) {
            return repository.retrieve(id);
        }

@Entity
public class Employee {
...
Run Code Online (Sandbox Code Playgroud)

bha*_*thp 5

我会说是的。通过返回一个实体,您将实现响应契约和数据库实体的紧密耦合。因此,将来如果您想修改您的响应/实体,您可能会遇到多个问题。例如,假设您的Employee实体有dateOfBirth字段,但您的客户希望您直接发送年龄。您必须修改Employee实体类并向其添加业务逻辑。因此,随着合同要求的变化,您的实体也会发生变化,这可能会导致多个问题。理想情况下,您将响应/请求契约与数据库实体解耦。但当然,一如既往,这取决于您认为代码的复杂程度。