gpt4 book ai didi

java - 是否可以将 spring-mvc 中的嵌套映射映射到全局路径?

转载 作者:行者123 更新时间:2023-12-02 11:18:09 25 4
gpt4 key购买 nike

我有这样的东西:

@RestController
@RequestMapping("/{id}")
public class MyController {
@GetMapping
public String get(@PathVariable String id) {
...
}

@PostMapping
public String post(@PathVariable String id, Payload payload) {
...
}

@GetMapping("/deeper/{id}")
public String getDeeper(@PathVariable String id) {
....
}
}

这给出了 3 个映射:

  • /{id} (GET)
  • /{id}(发布)
  • /{id}/deeper/{id} (GET)

我希望其中的第三个只是 /deeper/{id} (GET)

是否可以将方法保留在同一 Controller 中并保留 Controller 方面的 @RequestMapping 注释?

最佳答案

您的请求是不可能的,因为您无法避免类级别上的 requestMapping ,这是没有意义的,因为在类级别上意味着您希望该路径影响您的所有方法。

请记住,RestController 是 RESTful,并且使用类级别 requestMapping 来避免向每个方法添加相同的资源路径,因此拥有无法适合该资源的方法是没有意义的(您应该将其移动到另一个 Controller )。

话虽如此,您可以尝试以下几种方法:

1 不建议这样做。在您的类上使用多个路径值@ResquestMapping,根据您的情况:

@RestController
@RequestMapping("/{id}", "/")
public class MyController{...}

你可以用这个实现你想要的,但这非常 气馁和代码味道,因为基本上意味着你的所有方法都将接受以 id 或/开头的 url 路径,如果你想使用这种方法,请仔细考虑。

2 推荐的,在类级别中删除 @RequestMapping 并根据您的情况更新每个方法的路径:

@RestController
public class MyController {
@GetMapping(value = /{id})
public String get(@PathVariable String id) {
...
}

@PostMapping(value = "/{id}")
public String post(@PathVariable String id, Payload payload) {
...
}

@GetMapping("/deeper/{id}")
public String getDeeper(@PathVariable String id) {
....
}
}

3 也是推荐的 只需将不适合 Controller “通用逻辑”的方法移动到另一个 Controller 类,这是有意义的,因为该方法不受 Controller 通用逻辑的影响。

关于java - 是否可以将 spring-mvc 中的嵌套映射映射到全局路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55898376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com