java - 在服务层使用DTO是一个好的实践吗?

标签 java spring spring-boot model-view-controller dto

我有一个 Controller ,可以将 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? 例如:

    public interface UserService{
      UserDto save(UserDto userDto);
}

在 Controller 级别转换实体和 dto 的决定是否正确?

最佳答案

将任何转换逻辑放入 Controller 中是一种不好的做法。所有转换/填充逻辑都应放入辅助类中,例如转换器和填充器。检查here举个例子。

此外,您的服务类应该获取用于 CRUD 操作的实体(而不是 DTO),因为 DTO 可能不具有成功完成 CRUD 操作所需的所有值。然而,更好的做法是将所有 CRUD 操作放到一个公共(public)服务中,例如EntityService 并向其传递必须执行 CRUD 操作的实体(例如用户),例如YourEntityService.save(用户)。检查herehere举个例子。

关于java - 在服务层使用DTO是一个好的实践吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60307608/

相关文章:

java - 更好地理解错误 : Scope 'session' is not active for the current thread

java - 如何使用 Spring-boot 处理越来越多的 STOMP 主题

java - 一个ServerSocket与多个Socket之间的通信

java - 获取 'java.lang.UnsatisfiedLinkError' : no lwjgl in java. library.path

java - 使用Spring Boot访问微服务

spring - Hystrix:无法连接到命令指标流

java - 与@SpringBootTest 一起使用时删除@DataJpaTest 的推荐方法

java - Spring Boot 进度报告

java - 我们可以在断电的情况下丢失 kafka 消息吗?

java - 我尝试在 jlayeredpane 上绘制一系列图像;我用 for 迭代将这些图像加载到一个类中,但图像不显示