将映射属性合并到 Java POJO
Merge map properties to Java POJO
我想为 REST api 实现更新(方法 PUT)操作。在前端应用程序中,我的控制器方法需要值映射,例如:
@PutMapping(value = "/profile")
public UserDto updateProfile(JwtAuthenticationToken jwtAuthenticationToken, @RequestBody Map<String, ?> userForm) {
...
}
我想使用 map 作为请求体而不是 POJO 因为在 opf map 的帮助下我可以为每个状态声明 3 个状态 属性:
- 属性 在地图中不存在 - 属性 没有变化,不更新 bean 属性
- 属性 存在且不为空 - 用值
更新 bean 属性
- 属性 存在并且为 null - 将 bean 属性 更新为 null
使用 POJO 我无法处理上面列表中的 #1 - 属性 总是以 null 或非 null 值存在
在我的服务方法中,我必须根据上述 3 条规则将地图中的属性与我的 User
对象合并。
当然,我可以在我的自定义代码中使用反射来做到这一点 api 但正在寻找一些可以帮助我完成此任务的现有实用程序...某种
user = BeanUtils.merge(userForm, user);
有的话请告知
您可以将 User
对象转换为 Map
并按如下方式工作:
- 将
User
转换为 Map
原始对象
- 将所有项目添加到从
userForm
到 original
- 将原件转换为
User
class
- 对更新后的用户执行您需要的操作
基本上代码是这样的:
private ObjectMapper objectMapper;
...
public User merge(User originalUser, Map newUserMap) {
Map originalUserMap = objectMapper.convertValue(originalUser, Map.class);
originalUserMap.putAll(newUserMap);
return objectMapper.convertValue(originalUserMap, User.class);
}
...
User userAfterModifications = merge(user, userForm);
... // Do what you need with the updated user
请注意,您需要确保 Map 实现支持空值。
我想为 REST api 实现更新(方法 PUT)操作。在前端应用程序中,我的控制器方法需要值映射,例如:
@PutMapping(value = "/profile")
public UserDto updateProfile(JwtAuthenticationToken jwtAuthenticationToken, @RequestBody Map<String, ?> userForm) {
...
}
我想使用 map 作为请求体而不是 POJO 因为在 opf map 的帮助下我可以为每个状态声明 3 个状态 属性:
- 属性 在地图中不存在 - 属性 没有变化,不更新 bean 属性
- 属性 存在且不为空 - 用值 更新 bean 属性
- 属性 存在并且为 null - 将 bean 属性 更新为 null
使用 POJO 我无法处理上面列表中的 #1 - 属性 总是以 null 或非 null 值存在
在我的服务方法中,我必须根据上述 3 条规则将地图中的属性与我的 User
对象合并。
当然,我可以在我的自定义代码中使用反射来做到这一点 api 但正在寻找一些可以帮助我完成此任务的现有实用程序...某种
user = BeanUtils.merge(userForm, user);
有的话请告知
您可以将 User
对象转换为 Map
并按如下方式工作:
- 将
User
转换为Map
原始对象 - 将所有项目添加到从
userForm
到original
- 将原件转换为
User
class - 对更新后的用户执行您需要的操作
基本上代码是这样的:
private ObjectMapper objectMapper;
...
public User merge(User originalUser, Map newUserMap) {
Map originalUserMap = objectMapper.convertValue(originalUser, Map.class);
originalUserMap.putAll(newUserMap);
return objectMapper.convertValue(originalUserMap, User.class);
}
...
User userAfterModifications = merge(user, userForm);
... // Do what you need with the updated user
请注意,您需要确保 Map 实现支持空值。