gpt4 book ai didi

spring-mvc - spring MVC Controller 版本控制

转载 作者:行者123 更新时间:2023-12-04 12:04:37 24 4
gpt4 key购买 nike

我有一个 spring boot 应用程序,它有一个 spring MVC Controller 。我正在尝试使用 Accept header 对我的 rest api 进行版本控制。

以下是我的 Controller 的样子

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 时在 Accept header 中传递的版本如何,总是调用“getByappleId”方法,因此只返回版本 1 响应。

我的 Controller 有什么问题吗?

最佳答案

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

  • 在评论方法中建议手动路由您的请求;
  • 将版本作为 Accept header 值的一部分,例如:
    (headers = "Accept=application/vnd.name.v1+json")(headers = "Accept=application/vnd.name.v2+json")
  • 将版本作为映射的一部分:
    @GetMapping("apples/v1/{id})"@GetMapping("apples/v2/{id})

  • 所以你需要决定走哪条路。一些有用的链接:
  • Versioning a REST API
  • Best practices for API versioning?
  • 关于spring-mvc - spring MVC Controller 版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43594132/

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