2015-07-14 6 views
0

Прежде всего, я покажу свой код. У меня есть этот общий интерфейс:Наследование основного интерфейса Java

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; 
} 

Геттеры и сеттеры пропустили. я тогда еще один конкретный интерфейс, который расширяет выше базовый интерфейс так: WsPersonasInterface:

public interface WsPersonasInterface<I extends SessionPeticionBaseBean, O extends WsRespuestaBaseBean> 
extends BaseWebserviceCool<I, O> 
{ 


} 

Дело в том, что мой веб-контроллер должен реализовать метод базового интерфейса через определенный интерфейс (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); 

    } 

Для краткости я пропустил оставшиеся методы. Но эта реализация/наиважнейшая терпит неудачу ..

I мой контроллер, CreatePersonaWsRespuestaBean и PersonaWsRespuestaBean классы, наследующий от WsRespuestaBean и CreatePersonaWsPeticionBean и ReadPersonaWsPeticionBean наследует от SessionPeticionBaseBean.

Несомненно, проблема с дизайном, любой умный ум дает несколько советов?

+0

Я не понимаю, почему веб-контроллер _my должен реализовать метод базового интерфейса через определенный интерфейс. –

+0

Если я правильно понимаю, вы просто хотите заменить 'реализует BaseWebserviceCool ' by 'реализует WsPersonasInterface '. В чем проблема? –

+0

Я использую интерфейсы для тестирования. «Основной общий интерфейс» предоставляет типичные операции CRUD, но моему контроллеру могут потребоваться некоторые конкретные операции, такие как «findUserByName», которые не определены в «базовом интерфейсе». – alxsimo

ответ

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); 

    } 
0

По моему мало знаний и понимания вашего кода, вы пытаетесь реализовать определенный алгоритм в вашем case, создайте определенный тип создания объекта. Таким образом, вы можете выбрать приемлемые шаблоны проектирования, такие как шаблон стратегии. Strategy Pattern

Смежные вопросы