我正在尝试使用请求者信息等其他信息来包装实体数据。现在,我有以下代码,
public class EntityController {
@Autowired
private EntityValidator entityValidator;
...
@InitBinder("entity")
protected void initBinder(WebDataBinder binder) {
binder.addValidators(entityValidator);
}
}
我的验证员就像
public class EntityValidator implements Validator {
@Override
public boolean supports(Class<?> clz) {
return Entity.class.equals(clz);
}
@Override
public void validate(Object obj, Errors errors) {
...
}
}
对于传递给validate方法的Object参数,现在是Entity类对象。正如我所说,我想要一个包含此实体类对象的自定义对象。这可能吗?如果是的话,怎么做?请帮忙。非常感谢。
答案 0 :(得分:0)
如果我理解正确,您希望Entity
实例成为另一个类的成员(包含此实体类对象的自定义对象)。这样的事情怎么样:
public interface EntityHolder {
Entity getEntity();
}
您可以通过多种方式实现(自定义对象):
public class RequestorInfo implements EntityHolder {
private final long requestorId;
public Entity getEntity() { ... }
}
public class CustomObject2 implements EntityHolder {
public Entity getEntity() { ... }
}
然后像这样使用验证器:
public class EntityValidator implements Validator {
@Override
public boolean supports(Class<?> clz) {
return EntityHolder.class.isAssignableFrom(clz);
}
@Override
public void validate(Object obj, Errors errors) {
EntityHolder holder = (EntityHolder) obj;
// validate the entity obtained by holder.getEntity()
}
}
请注意equals
方法中isAssignableFrom
已更改为supports
。这使您可以传入EntityHolder
。