2016-10-25 3 views
0

API를 생성하기 위해 Spring 프레임 워크를 사용하고 있습니다. 방법이 있나요 나는 클래스 수준Spring @ Requestmapping 클래스 레벨 복수

@RequestMapping({"/jobs","/subs"}) 

에서 정의 된 두 개의 URL을 원하고 나는 URL이 /host:port/jobs 때 방법 1을 호출 할 내가 URL이 /host:port/subs

때 방법 (2)를 호출 할 이것을하기 위해 ?

클래스 수준에서 매핑을 제거하고 메서드 수준에서 정의 할 수는 있지만 다른 모든 메서드에 대해 매핑을 정의하고 싶지는 않습니다.

+0

불가능합니다. 각 메소드에 대해'RequestMapping'을 정의하십시오. – dit

답변

0

당신은 @PathVariable

@RequestMapping(value = "/{whichOne}") 
public class someController { 
    @RequestMapping 
    public ResponseObject someMethod(@PathVariable("whichOne") String whichOne) { 
     switch (whichOne) { 
      case "jobs": 
       return resolveJobs(); 
      case "subs": 
       return resolveSubs(); 
     } 
    } 
} 

사용할 수 있습니다하지만 난 할을하지 않는 것이 좋습니다 그. 두 개의 요청 매핑을 사용하는 두 가지 방법이 올바른 방법입니다.

+0

도움을 주셔서 감사합니다. 그러나 경로 변수를 사용하는 경우 해당 메소드를 호출하여 HATEOAS 링크를 사용하는 데 문제가 있습니다. – Ashutosh

0
I don't want to have to define the mapping for all the other methods. 

무엇을 의미합니까? 다른 클래스와 마찬가지로 컨트롤러 패턴에서 URL 패턴에 매핑되지 않는 메서드를 사용할 수 있습니다.

여기 디자인에 결함이 있다고 생각합니다. 차라리 메서드 수준에서이 매핑을 추가하고이를 처리하는 두 개의 별도 메서드가 있습니다.

+0

내가 말한 의미는 다른 메소드가 클래스 수준 URL에 부분 URL을 추가한다는 것입니다. – Ashutosh

0

정말 추한이지만,이 트릭을 수행 할 수 있습니다

@Controller 
@RequestMapping({ "/jobs", "/subs" }) 
public class MyController { 

    @RequestMapping(method = RequestMethod.GET) 
    public String get(HttpServletRequest request) { 

     String url = request.getRequestURI().toString(); 

     if (url.endsWith("jobs")) { // or contains 
      return getJobs(request); 
     } 

     // subs 
     return getSubs(request); 
    } 

    private String getJobs(HttpServletRequest request) { 
     [...] 
     return "jobs"; 
    } 

    private String getSubs(HttpServletRequest request) { 
     [...] 
     return "subs"; 
    } 
} 
+0

하위 메서드에 부분 URL이있는 경우에만 문제가 발생합니다. 그러나 나는 디자인의 변화로 이것을 시도 할 것이다. 당신의 도움을 주셔서 감사합니다. – Ashutosh

관련 문제