spring rest控制器-同一头的不同值

9bfwbjaz  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(318)

我有一个spring rest控制器和两个单独的getmapping,它们具有相同的值,但每个都接受相同头的不同头值(即,一个get方法用于v1,一个get方法用于v2)。

@GetMapping(value = "/{id}",  headers = { "Accept-version=v1"})
public UserV1 findByIdV1(@PathVariable long id) {
  return ...;
}

@GetMapping(value = "/{id}",  headers = { "Accept-version=v2"})
public UserV1 findByIdV2(@PathVariable long id) {
  return ...;
}

如果实现没有从一个版本更改到另一个版本,那么最好的方法是使用一个可以接受任何一个头值的方法吗?
理想情况下,该解决方案将允许我使用不同的实现为不同的版本提供不同的方法,以便能够使用openapi正确地记录这些方法。类似于以下内容:

@GetMapping(value = "/{id}",  headers = { "Accept-version=v1 OR Accept-version=v2"})
public UserV1 findByIdV1(@PathVariable long id) {
  return ...;
}

// Different response, thus need different method to be able to document this.
@GetMapping(value = "/{id}",  headers = { "Accept-version=v3"})
public UserV3 findByIdV2(@PathVariable long id) {
  return ...;
}
vfh0ocws

vfh0ocws1#

你可以用 @RequestHeader 要将头信息作为参数传递到方法中,请执行以下操作:

@GetMapping(value = "/{id}")
public UserV1 findByIdV2(
    @PathVariable long id, 
    @RequestHeader("Accept-version") String acceptVersion
) {
    // make a decision based on acceptVersion
    return ...;
}

相关问题