2016-10-25 173 views
0

我正在使用Spring框架來創建api。 我想在類級別Spring @Requestmapping類級別多個

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

定義兩個網址,我想調用方法1時,網址爲/host:port/jobs ,我想調用方法2時,網址爲/host:port/subs

是否有辦法去做這個 ?

我可以刪除類級別的映射並在方法級別上定義它,但我不想這樣做,因爲我不想爲所有其他方法定義映射。

+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模式的方法。

我認爲這裏的設計存在一些缺陷。我寧願在方法級別添加這個映射,並有2個獨立的方法來處理這個問題。

+0

我的意思是其他方法將部分網址附加到類級網址。 – 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

唯一的問題是子方法也有部分網址。但我會嘗試改變設計。謝謝你的幫助。 – Ashutosh