我有一个 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(用户)。检查here和 here举个例子。
关于java - 在服务层使用DTO是一个好的实践吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60307608/