首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring控制器版本控制

spring控制器版本控制
EN

Stack Overflow用户
提问于 2017-04-24 17:14:32
回答 2查看 2K关注 0票数 7

我有一个spring引导应用程序,它有一个spring控制器。我正在尝试使用Accept对rest进行版本化。

下面是我的控制器的样子

代码语言:javascript
复制
RestController
@RequestMapping(value = "/private/")
public class AppleController {

  private final AppleService appleService;

  public AppleController(AppleService appleService) {
    this.appleService = appleService;
  }

  @GetMapping(value = "apples/{id}", produces = "application/json; v=1.0",
      headers = "Accept=application/json; v=1.0")
  public ResponseEntity getByappleId(@PathVariable("id") Long appleId) {
    System.out.println("version1");

    GetByappleIdResponse response = appleService.findByappleId(appleId);

    return new ResponseEntity<>(response, HttpStatus.OK);
  }



  @GetMapping(value = "apples/{id}", produces = "application/json; v=2.0",
      headers = "Accept=application/json; v=2.0")
  public ResponseEntity getByappleId2(@PathVariable("id") Long appleId) {
    System.out.println("version2");
    GetByappleIdResponse response = appleService.findByappleId2(appleId);
    return new ResponseEntity<>(response, HttpStatus.OK);
  }

无论我在调用API时传递的接受标头是什么版本,都会调用"getByappleId“方法,因此只返回version 1响应。

我的控制器有什么问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-08 17:29:18

正如在这个答案中所描述的:https://stackoverflow.com/a/34427044/258813 (以及注释中提到的)不支持使用这样的头进行路由。

如果您希望通过版本头来支持路由,我将推荐一个自定义路由条件和注释--当然,如果您正在构建一个大型API,它将导致代码更少和更优雅的解决方案。

您可以定义一些注释,比如@ApiVersion(1),它可以添加到任何也是请求映射的方法中,然后添加自定义路由条件,它将正确运行。

我在这里描述了使用自定义路由条件和注释(基于子域--但可以很容易地切换到检查头):http://automateddeveloper.blogspot.co.uk/2014/12/spring-mvc-custom-routing-conditions.html

票数 2
EN

Stack Overflow用户

发布于 2017-05-05 10:11:51

有许多实现REST版本控制的选项:

  • 在注释方法中建议手动路由您的请求;
  • 将版本作为接受标头值的一部分,f.e.: (headers = "Accept=application/vnd.name.v1+json") (headers = "Accept=application/vnd.name.v2+json")
  • 将版本作为映射的一部分: @GetMapping("apples/v1/{id})" @GetMapping("apples/v2/{id})

所以你得决定走哪条路。一些有用的链接:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43594132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档