Java 在服务层中使用DTO是一种好的实践吗?

Java 在服务层中使用DTO是一种好的实践吗?,java,spring,spring-boot,model-view-controller,dto,Java,Spring,Spring Boot,Model View Controller,Dto,我有一个控制器,它将dto转换为实体并将其传递给服务级别 @PostMapping(value = "/new", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<UserDto> create(@RequestBody UserDto userDto){ User newUser= userService.save(userMapper.userDto

我有一个控制器,它将dto转换为实体并将其传递给服务级别

@PostMapping(value = "/new", produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<UserDto> create(@RequestBody UserDto userDto){           
        User newUser= userService.save(userMapper.userDtoToUser(userDto));            
        return ResponseEntity......body(userMapper.userToUserDto(newUser));
    }

在控制器级别转换实体和dto的决策正确吗?

在控制器中放置任何转换逻辑都是错误的做法。所有转换/填充逻辑应放在辅助类中,例如转换器和填充器。请查看示例


此外,您的服务类应该为CRUD操作获取一个实体(而不是DTO),因为DTO可能没有成功完成CRUD操作所需的所有值。但是,更好的做法是将所有CRUD操作放在一个公共服务上,例如EntityService,并将其传递给必须执行CRUD操作的实体(例如用户),例如YourEntityService.save(用户)。检查并获取一个示例。

在服务层转换DTO的最佳实践是,不要在控制器中放置任何逻辑。
    public interface UserService{
      UserDto save(UserDto userDto);
}