2014-09-03 3 views
4

저의 Jersey 프로젝트에서 요청/세션에 대한 일부 작업을 수행하는 사용자 정의 InjectableProvider를 사용하여 RESTful 서비스에 필요한 사용자 ID를 작성합니다. 즉, 다음과 같은 서비스 메소드를 작성할 수 있습니다.Jersey InjectableProvider와 비슷한 Spring MVC 컨트롤러에 컨텍스트 삽입하기

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public String getByAccountIdAndGroup(@InjectAccount(required=false) String accountId, @DefaultValue("default") @QueryParam("productGroup") String productGroup) { 
... 
} 

여기서 @InjectAccount는 내 사용자 정의 주석입니다.

동일한 프로젝트에서 SpringMVC 컨트롤러에 대해 비슷한 작업을하고 싶습니다. 즉, 내가 쓸 수 있도록하려면 : I 공통 코드를 고려하기보다는 직접 뉴저지 InjectableProvider에게 다시 사용해야 할 것으로 예상하고있어

@RequestMapping(method = RequestMethod.GET) 
public String showForm(Model model, @InjectAccountSpringMvc String accountId) { 
... 
} 

.

아마도 Spring 중심의 방법은 내 컨트롤러에 삽입 된 스레드 범위 Bean을 사용하는 것이지만 저지 스타일을 Spring MVC에서 모두 수행 할 수 있는지 궁금합니다. 스레드 범위 접근 방식을 통해 주입 된 서비스는 다음과 같습니다

@Component 
@Scope("THREAD") 
public class AccountResolver { 
    @Autowired 
    private HttpServletRequest request 

    private String theAccount=null; 

    public String getAccount() { 
     if (theAccount == null) { 
     theAccount=resolveAccount(); 
     } 
     return theAccount; 
    } 
} 

이 같은 깔끔하지 않고 더 어려워 직접 컨트롤러를 테스트 할 것입니다.

아이디어/의견을 보내 주시면 감사하겠습니다.

Alfie.

답변

2

예, 스프링에서 수행 할 수 있습니다. 자신 만의 HandlerMethodArgumentResolver을 구현하고 등록해야합니다.

supportsParameter 메서드는 매개 변수의 주석을 찾습니다. resolveArgument 메서드는 처리기 메서드를 호출 할 때 사용할 인수를 검색하는 논리를 수행합니다.

+0

항공권처럼 보입니다. 감사합니다. – jugglingcats

관련 문제