我试图找出是否有办法强制执行在Spring表单提交的绑定阶段调用setter方法的顺序。
例如,我有一个包含反映对象状态的字段的POJO,并根据此变量的状态加载POJO的不同部分。我已经尝试将该字段移动到POJO中的第一个字段,我也尝试过@Order注释,但无济于事。
有没有办法改变字段绑定到POJO的顺序,或者我是否完全错误,并且没有办法控制它?
由于
更新 所以我面临的情况是我正在重复使用磁贴进行登录和帐户创建页面。在新网站中,当客户购买软件时,他们可以选择交付方式(现有帐户,新帐户或其他)。所以我有一个@ModelAttribute PurchasingDTO,如下所示;
public class PurchasingDTO {
// used by the Login
@Valid
private AuthorizationDTO auth;
// use by account creation
@Valid
private AccountDTO account;
@Order(Integer.MIN_VALUE)
private AssociationTypes typeOfAssociation;
//... getter setters etc such as this
public void setUsername(String username) {
if (isNew()) {
this.account.setUsername(username);
} else if (isExisting()) {
this.auth.setUsername(username);
}
}
}
注意使用isNew()和isExisting()来指示字段的设置。我认为这种方法非常错误(显然)是基于无法定义setter调用顺序。
包括2个对象的原因即使字段中存在重叠(技术上不需要AuthorizationDTO,因为AccountDTO具有相同的字段和其他字段)是由于验证框架。我无法使用Spring的验证注释的“组”部分。
请原谅我,因为我是前端Spring的新手。
答案 0 :(得分:0)
如评论中所述,在撰写本文时无法做到这一点。
我解决这个问题的方法是我重新设计了我的基础POJO,因此没有重复的字段。我继续以相同的方式跟踪pojo的状态,服务层知道如何处理给定状态的数据。
希望这有助于其他人。