我正在使用Spring框架來創建api。 我想在類級別Spring @Requestmapping類級別多個
@RequestMapping({"/jobs","/subs"})
定義兩個網址,我想調用方法1時,網址爲/host:port/jobs
,我想調用方法2時,網址爲/host:port/subs
是否有辦法去做這個 ?
我可以刪除類級別的映射並在方法級別上定義它,但我不想這樣做,因爲我不想爲所有其他方法定義映射。
我正在使用Spring框架來創建api。 我想在類級別Spring @Requestmapping類級別多個
@RequestMapping({"/jobs","/subs"})
定義兩個網址,我想調用方法1時,網址爲/host:port/jobs
,我想調用方法2時,網址爲/host:port/subs
是否有辦法去做這個 ?
我可以刪除類級別的映射並在方法級別上定義它,但我不想這樣做,因爲我不想爲所有其他方法定義映射。
您可以使用@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(); } } }
但我不建議你做那。具有兩個請求映射的兩種方法是正確的方法。
感謝您的幫助,但是如果您使用路徑變量,那麼您將通過調用該方法使用HATEOAS鏈接時遇到問題。 – Ashutosh
I don't want to have to define the mapping for all the other methods.
你是什麼意思?就像任何其他類一樣,您可以在控制器類中擁有不映射到任何URL模式的方法。
我認爲這裏的設計存在一些缺陷。我寧願在方法級別添加這個映射,並有2個獨立的方法來處理這個問題。
我的意思是其他方法將部分網址附加到類級網址。 – Ashutosh
這實在是醜陋,但你可以用這一招做到這一點:
@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";
}
}
唯一的問題是子方法也有部分網址。但我會嘗試改變設計。謝謝你的幫助。 – Ashutosh
不可能。爲每種方法定義'RequestMapping'。 – dit