【发布时间】:2023-03-19 12:52:01
【问题描述】:
我有一个接受 dto 对象的控制器。我需要更改 dto 对象中存在的字段。
@PatchMapping(value = "/update/{uuid}")
public ResponseEntity<UserDto> update(
@RequestBody UserDto userDto,
@PathVariable("uuid")UUID uuid) throws UserNotFoundException {
User updatedUser = userService.update(
userMapper.userDtoToUser(userDto),
uuid
);
return .....
}
但 userService 只能接受实体。我需要使用映射器 dto -> 实体。但是实体不能有 dto 中的空字段(假设您只需要更改一个字段)。在这种情况下该怎么办?我知道控制器不应该包含逻辑
【问题讨论】:
-
您是否考虑过将 userService 更改为期望 userDto 而不是 userEntity?服务层应该是处理转换逻辑的吧?
-
在实体类中添加一个构造函数,它接受一个 DTO 对象作为唯一参数。
-
你的问题是dto字段的转换还是验证?
-
在 Spring MVC 中打补丁/部分更新并不容易。这里有一些讨论:stackoverflow.com/questions/37681555/…。这里可能的方法:cassiomolin.com/2019/06/10/using-http-patch-in-spring
标签: java spring spring-boot jpa dto