如何将具有相同前缀 uri 的映射重载到 Spring 中的不同方法?

How to overload mapping with same prefix uri to different methods in Spring?

我正在尝试将具有相同前缀的两个不同 URI 映射到两个不同的处理程序

POST "resource" -> resourcesBl.create

POST "resource/{path_variable}" -> resourcesBl.create其他

注意 - 每个请求正文都不同

并且 Spring 不会自动执行

@RestController
@RequestMapping("resource") 
public class MyController {

    @Autowired
    private ResourcesBl resourcesBl;

    @PostMapping
    public Resource create(@RequestBody Resource resource) {
        return resourcesBl.create(resource);
    }

    @PostMapping("/{resourceName}"}
    public OtherResource create(@PathVariable String resourceName, @RequestBody OtherResource otherResource, ) {
        return resourcesBl.createOther(otherResource);
    }

}

我已经用 Postman 尝试过这个解决方案,它工作得很好并且采用路径变量,两个映射都可以用不同的主体调用。

@RestController
@RequestMapping("/resource")
public class MyController {

    @Autowired
    private ResourcesBl resourcesBl;

    @RequestMapping(method = RequestMethod.POST)
    @ResponseBody
    public Resource create(@RequestBody Resource resource) {
        return resourcesBl.create(resource);
    }

    @RequestMapping(value = "/{resourceName}", method = RequestMethod.POST)
    @ResponseBody
    public OtherResource create(@PathVariable String resourceName,
                                @RequestBody OtherResource otherResource) {
        return resourcesBl.createOther(resourceName, otherResource);
    }
}

所有带有空路径参数的请求都将映射到第一个方法,因此:“/resource”和“/resource/”。斜线到第二个之后的任何内容。

注意:不要忘记使用路径变量。