我正在使用Spring框架来创建api。 我想在课程级别定义两个网址
@RequestMapping({"/jobs","/subs"})
我想在网址为/host:port/jobs
时调用方法1
当网址为/host:port/subs
有办法做到这一点吗?
我可以在类级别删除映射并在方法级别定义它,但我不想这样做,因为我不想为所有其他方法定义映射。
答案 0 :(得分:0)
I don't want to have to define the mapping for all the other methods.
你是什么意思?就像任何其他类一样,您可以在控制器类中使用不映射到任何URL模式的方法。
我认为这里的设计存在一些缺陷。我宁愿在方法级别添加此映射,并且有两个单独的方法来处理它。
答案 1 :(得分: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";
}
}
答案 2 :(得分: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(); } } }
但我不建议你这样做。有两个请求映射的两种方法是正确的方法。