Pik*_*chu 5 java spring jpa dto spring-boot
我有一个接受 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 .....
}
Run Code Online (Sandbox Code Playgroud)
但 userService 只能接受实体。我需要使用映射器 dto -> 实体。但是实体不能有 dto 中的空字段(假设您只需要更改一个字段)。在这种情况下该怎么办?我知道控制器不应该包含逻辑
您可以使用反射来检查 null 属性和BeanUtils进行复制
在 Spring 中,这将是我检查空属性的方式
public static String[] getNullPropertyNames (Object source) {
final BeanWrapper src = new BeanWrapperImpl(source);
PropertyDescriptor[] pds = src.getPropertyDescriptors();
Set<String> emptyNames = new HashSet<>();
for(PropertyDescriptor pd : pds) {
Object srcValue = src.getPropertyValue(pd.getName());
if (srcValue == null) emptyNames.add(pd.getName());
}
return emptyNames.toArray(new String[0]);
}
Run Code Online (Sandbox Code Playgroud)
然后进行复制
User updatedUser = new User();
BeanUtils.copyProperties(userDto, updatedUser, getNullPropertyNames(userDto));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5039 次 |
| 最近记录: |