首先,我将展示我的代码。我有这个通用接口:
BaseWebserviceCool:
public interface BaseWebserviceCool<I extends SessionPeticionBaseBean, O extends WsRespuestaBaseBean> {
O create(I wsRequest);
O read(I wsRequest);
O update(I wsRequest);
void delete(I wsRequest);
}
SessionPeticionBean:
public class SessionPeticionBaseBean implements Serializable {
private String token;
private String uuidUsuarioLogado;
}
WsRespuestaBean:
public class WsRespuestaBaseBean implements Serializable
{
private String codigoRespuesta;
private String mensajeRespuesta;
private boolean error;
private Map<String, String> errors;
}
Getters和setters跳过了。 然后我有另一个特定的接口,扩展了上面的基本接口: 的 WsPersonasInterface:
public interface WsPersonasInterface<I extends SessionPeticionBaseBean, O extends WsRespuestaBaseBean>
extends BaseWebserviceCool<I, O>
{
}
关键是我的Web控制器必须通过特定的接口( WsPersonasInterface )实现基本接口方法。在我的控制器中我做了类似的事情:
public class PersonasController extends BaseController
implements BaseWebserviceCool<SessionPeticionBaseBean, WsRespuestaBaseBean>
{
@RolesAllowed({ "ROLE_USER" })
@RequestMapping(value = "/create/", method = { RequestMethod.POST }, headers = "Accept=application/xml, application/json")
@Override
public CreatePersonaWsRespuestaBean create(
@RequestBody @Valid CreatePersonaWsPeticionBean createPersonaPeticionBean) {
return personasBusiness.createPersona(createPersonaPeticionBean);
}
@Override
public @ResponseBody PersonaWsRespuestaBean read(
@RequestBody @Valid ReadPersonaWsPeticionBean readPersonaWsPeticionBean) {
return personasBusiness.readPersona(readPersonaWsPeticionBean);
}
为简洁起见,我跳过了其余的方法。但是这种实现/覆盖失败了..
我的控制器 CreatePersonaWsRespuestaBean和PersonaWsRespuestaBean是继承自WsRespuestaBean的类,CreatePersonaWsPeticionBean和ReadPersonaWsPeticionBean继承自SessionPeticionBaseBean 。
肯定存在设计问题,任何聪明的心灵都会给出一些提示吗?
答案 0 :(得分:0)
更改控制器方法的签名,以尊重您实施的合同(您的界面BaseWebserviceCool
):
public class PersonasController extends BaseController
implements BaseWebserviceCool<SessionPeticionBaseBean, WsRespuestaBaseBean>
{
@RolesAllowed({ "ROLE_USER" })
@RequestMapping(value = "/create/", method = { RequestMethod.POST }, headers = "Accept=application/xml, application/json")
@Override
public WsRespuestaBaseBean create(
@RequestBody @Valid SessionPeticionBaseBean createPersonaPeticionBean) {
return personasBusiness.createPersona(createPersonaPeticionBean);
}
@Override
public @ResponseBody WsRespuestaBaseBean read(
@RequestBody @Valid SessionPeticionBaseBean readPersonaWsPeticionBean) {
return personasBusiness.readPersona(readPersonaWsPeticionBean);
}
答案 1 :(得分:0)
根据我对您的代码的一点知识和理解,您正在尝试在您的情况下实现某些算法,创建特定类型的对象创建。因此,您可以选择像Strategy模式这样广为接受的设计模式。 Strategy Pattern