Spring 数据 Rest:使用相同的请求映射路径覆盖 RestController 中的方法
Spring Data Rest: Override Method in RestController with same request-mapping-path
给定我们应用程序中的以下工作存储库:
public interface PersonRepository extends PagingAndSortingRepository<Person, Integer> {
}
存储库通过 spring-data-rest 与 URI“/api/persons”公开并按预期工作。
我们现在想在 RestController 的方法中覆盖存储库的 post 方法:
@RestController
@RequestMapping("/persons")
public class PersonController {
@RequestMapping(value = "/**", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> savePerson(@RequestBody Person person) {
//do something fancy
return "it works";
}
如果我们 post 数据到“/api/persons”,PersonController 的方法将被调用,但是 PersonRepository 的方法(例如 GET)的 none 可以通过 rest 访问。我们不断收到 405 错误和以下异常:
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported
经过一番尝试,我们发现如果我们将@RequestMapping注解的值-属性从
更改为属性,一切都按预期工作(可以调用存储库和控制器的方法)
value="/**"
到
value="/save"
阅读此 question 和链接文档后,如果值-属性 为“/**”
,它也应该有效
最后,在升级到 spring/spring-data/spring-data-rest 的新版本后,一切正常。
给定我们应用程序中的以下工作存储库:
public interface PersonRepository extends PagingAndSortingRepository<Person, Integer> {
}
存储库通过 spring-data-rest 与 URI“/api/persons”公开并按预期工作。
我们现在想在 RestController 的方法中覆盖存储库的 post 方法:
@RestController
@RequestMapping("/persons")
public class PersonController {
@RequestMapping(value = "/**", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> savePerson(@RequestBody Person person) {
//do something fancy
return "it works";
}
如果我们 post 数据到“/api/persons”,PersonController 的方法将被调用,但是 PersonRepository 的方法(例如 GET)的 none 可以通过 rest 访问。我们不断收到 405 错误和以下异常:
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported
经过一番尝试,我们发现如果我们将@RequestMapping注解的值-属性从
更改为属性,一切都按预期工作(可以调用存储库和控制器的方法)value="/**"
到
value="/save"
阅读此 question 和链接文档后,如果值-属性 为“/**”
,它也应该有效最后,在升级到 spring/spring-data/spring-data-rest 的新版本后,一切正常。