Spring @RequestMapping绝对路径

6

我有一个CRUD的RestController,注释如下:

@RestController
@RequestMapping("/rest/v1/area")
public class AreaController

我的方法被注释为:

@RequestMapping(value = "/{uuid}", method = RequestMethod.PUT)
public ResponseEntity<Area> save(@Valid @RequestBody Area area) {

有没有一种方法可以使用值来获得绝对路径的方法?我想添加一个上传文件的方法,但不想为此创建一个新的控制器。我想要这样一个方法:

@RequestMapping(value = "/rest/v1/area-upload", method = RequestMethod.PUT
public String handleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) {

谢谢!


我认为没有绕过机制,快速简便的方法是将现有方法的类型注释替换为方法注释,然后添加您的新方法(请注意,如果需要,您可以在类型级别上保留公共 URL 部分)。 - user180100
2个回答

12

来自文档:(spring 2.5 api document of requestmapping)

方法级别的映射只允许缩小类级别(如果有)所表示的映射范围。

因此,您不能覆盖它,只能将其缩小到子路径。

当然,如果您创建一个新的控制器类并将方法放在其中,则可以将其指向任何路径。


谢谢@Joeblade指引我走向正确的方向。我已经检查了我的版本:http://docs.spring.io/spring-framework/docs/4.3.2.RELEASE/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html,这仍然适用。 感谢大家提供的解决方法,我正在检查是否可以在不更改所有其他映射的情况下实现此目标。 - Germán

2
您可以仅更改控制器的路由映射。
@RestController
@RequestMapping("/rest/v1")
public class AreaController

方法的映射将如下所示:

@RequestMapping(value = "/area-upload", method = RequestMethod.PUT
public String handleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) {

这会更改控制器中所有其他端点的前缀。这里的假设是您有一个或两个端点与其余端点具有不同的前缀。 - Josh M.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接