首页 > 解决方案 > 如何将具有相同前缀uri的映射重载到Spring中的不同方法?

问题描述

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

发布“资源”-> resourcesBl.create

发布“资源/{path_variable}”-> resourcesBl.createOther

注意 - 每个请求的主体都不同

并且 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);
    }

}

标签: javaspringspring-mvcspring-restcontroller

解决方案


我已经用 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/”。斜线到第二个之后的任何内容。

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


推荐阅读