我有以下抽象模型类
public abstract class Thing {
private String id;
private String name;
...
}
其他3个模型类扩展了它。让我们称它们为岩石、纸张、剪刀。纸张示例:
public class Paper extends Thing {
private String paperFormat;
...
}
我现在需要实现以下CRUD相关接口:
public interface ThingOperations {
public String addThingForm();
public String processAddThing(Thing thing, BindingResult result);
...
}
这里,processAddThing()处理表单模型(addThingForm()初始化表单)。
现在假设我想创建一个与每个具体类(RockController、PaperController和ScissorController)相关的Controller。
这里是PaperController,作为一个示例。
public class PaperController implements ThingOperations {
...
@Override
@RequestMapping(value="/processAddPaper", method=RequestMethod.POST)
public String processAddThing(@Valid Paper newPaper, BindingResult result){
...
}
...
}
你知道问题是什么:
processAddThing()
在上面的示例中不正确。根据接口规范,我应该使用Thing类作为要验证的模型。但如果我把
@Valid
Thing newThing,我无法将newThing转换为Paper实例,因此,我无法调用(例如)适当的Service和DAO Hibernate实现来创建新的Paper记录。
如果我想在我的3个控制器上成功实现我的接口,并且仍然应用相关的
@Valid annotation
?