使用Spring MVC提交/绑定部分对象
问题内容:
Spring MVC绑定机制非常强大,但是我现在面临着一个琐碎的问题,我想知道如何解决:
User
JPA实体,也用于绑定和验证(即遍及所有层)- “编辑个人资料”页面,该页面不应更改密码或其他某些实体属性
我可以想到两种方法:
-
使用同一对象
- 用于
@InitBinder
配置不允许的属性列表 - 获取目标用户(按ID)
- 然后使用反射实用程序(BeanUtils)将已提交的对象复制到目标对象,但忽略
null
值-即未提交的字段 - 引入一个具有所需字段子集的新对象,
BeanUtils.copyProperties(..)
并将其合并到实体中。
- 用于
备择方案?
问题答案:
我发现,只要您的Web模型在功能上与业务层开始有所不同,最好使用视图层对象(模型对象)来收集或显示数据
实体:
public class com.myapp.domain.UserEntity {
}
模型对象:
public class com.myapp.somesite.web.SomeSiteUserModel {
public static SomeSiteUserModel from(UserEntity userEntity) {
... initialize model ...
}
public UserEntity getModelObject() {
... get entity back ...
}
}
现在,所有基于视图的操作都可以将处理交给内部模型对象(如果有必要的话),否则可以自己对其进行自定义。当然,与此有关的问题是,您必须重新编写实体所需的所有getter和setter(我不得不处理的这个问题,这很烦人),不幸的是,这有点像Java语言问题