Spring @Requestmapping类级别倍数

时间:2016-10-25 15:42:16

标签: java rest spring-mvc

我正在使用Spring框架来创建api。 我想在课程级别定义两个网址

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

我想在网址为/host:port/jobs时调用方法1 当网址为/host:port/subs

时,我想调用方法2

有办法做到这一点吗?

我可以在类级别删除映射并在方法级别定义它,但我不想这样做,因为我不想为所有其他方法定义映射。

3 个答案:

答案 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();
        }
    }
}

但我不建议你这样做。有两个请求映射的两种方法是正确的方法。