具有相同模式URL的多个路由

时间:2015-06-05 08:49:30

标签: java spring

我实际上是在创建一个简单的应用程序,我需要在多种情况下使路由模式相同:

/*
* Returns a list of all the root directories accepting query string on name
*/
@RequestMapping(value = "/directories", method = RequestMethod.GET)
public List<DirectoryEntity> find() {
    return directoryService.findAll();
}


/*
* Returns a list of all the root directories accepting query string on name
* @param name Name of the ressources to search. Query string at format : *name*
*/
@RequestMapping(value = "/directories", method = RequestMethod.GET)
public List<DirectoryEntity> findByCriteria(@RequestParam(value = "name", required = true) String name) {
    return directoryService.findByName(name);
}

事实上,我不想在与findAll相同的函数中管理条件请求。无论如何处理这种情况而不必强制管理同一函数内的所有内容?

感谢您提前

2 个答案:

答案 0 :(得分:1)

尝试更改第二种方法@RequestMapping注释添加参数:

@RequestMapping(value = "/directories", method = RequestMethod.GET, params = "name")
public List<DirectoryEntity> findByCriteria(@RequestParam(value = "name", required = true) String name) {
    return directoryService.findByName(name);
}

有关详细信息,另请参阅Spring Documentation

答案 1 :(得分:1)

我不太确定你在问什么,但是假设决定调用哪个方法是基于请求参数(必须是因为它们都是相同的URL和HTTP方法),那么像这样的东西可能有所帮助:

@RequestMapping(method=RequestMethod.GET, params={"name"})
public @ResponseBody List<DirectoryEntity> findByCriteria(@RequestParam(value = "name", required = true) String name) {
    //do your stuff
}

params注释中包含@RequestMapping属性可消除调用哪种方法的歧义。

我还在返回类型中添加了@ResponseBody,以防你希望Spring返回HTTP响应中的列表。