2012-03-09 4 views
0

STS 2.8.1 및 Spring 3.1.1.RELEASE를 사용하고 있습니다. Spring MVC 추상 컨트롤러 :: 추상 컨트롤러 인터페이스 구현시 정확한 메서드 서명을 얻는 방법

은 내가 STS에서 컨트롤러를 확장 할 때 그것은 나에게 내가 그 @RequestMapping을 이해
@Override 
public OAuthEntity setOAuthEntity(OAuthEntity oAuthEntity) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public OAuthEntity getOAuthEntity(Long id) { 
    // TODO Auto-generated method stub 
    return null; 
} 

아래와 같은 메소드 서명을 제공
public abstract class SuperController { 

@RequestMapping(value = "/Entity", method = RequestMethod.POST, headers = "Accept=application/xml,application/json") 
    public abstract @ResponseBody OAuthEntity setOAuthEntity(@RequestBody OAuthEntity oAuthEntity); 

@RequestMapping(value = "/Entity/{id}", method = RequestMethod.GET, headers = "Accept=application/xml,application/json") 
    public abstract @ResponseBody OAuthEntity getOAuthEntity(@PathVariable("id") Long id); 
} 

아래 같은 추상 컨트롤러가 잘 계승하고 I 또한 코드를 테스트했습니다 (작동합니다!). 내가 원하는 것은 수퍼 클래스를 확장 할 때 추상 클래스처럼 @ResponseBody, @PathVariable ("id") 및 @RequestBody를 가져야한다는 것입니다. 물론

I (즉 내가 뭐하는 거지하지만 더 우아한 방법을 부탁합니다) 수동으로 편집 할 수있는 서브 클래스가

@Override 
public @ResponseBody OAuthEntity setOAuthEntity(@RequestBody OAuthEntity oAuthEntity) { 

    @Override 
public @ResponseBody OAuthEntity getOAuthEntity(@PathVariable("id") Long id) { 

아래에 나와 있지만 좌절을 죽이고되지 않는 등의 방법 서명을 가질 수 있도록 수동으로 작성해야합니다. 도움을 주시면 대단히 감사하겠습니다.

답변

0

스프링 3은 컨트롤러 용 인터리브 개념을 없앴습니다. 필자의 조언은 추상적 인 컨트롤러 아이디어를 버리고 컨트롤러에 이러한 주석을 추가하는 것입니다.

상속은이 컨텍스트에서 의미가 없습니다. 하나의 컨트롤러 메소드가 애플리케이션에서 주어진 요청 매핑을 처리하기를 원합니다. 내 의견으로는 부모/자녀 관계가 필요 없습니다. 이러한 주석을 적절한 컨트롤러 구현으로 옮기고 추상 클래스를 제거하는 것이 좋습니다.

+0

저는 여러 컨트롤러에서 동일한 메소드 서명을 원했기 때문에 부모/자식 관계가 필요했습니다. 그런 식으로 다른 컨텍스트에 대해 서로 다른 구현을 할 수 있습니다. 슈퍼 컨트롤러는 OauthController이고 아이들은/google,/facebook 등입니다. – user1259352

관련 문제