【发布时间】:2015-08-25 11:01:01
【问题描述】:
我们计划使用内容类型协商作为我们的 REST API 的版本控制形式,但它似乎比应有的复杂。 给出以下示例代码:
@RestController
@RequestMapping("/products")
ProductController {
.......
@RequestMapping(value = "/{productID}", method = RequestMethod.GET, produces = "productVersion2/json")
public ResponseEntity<ProductV2> getVersion2(@PathVariable String productID) {
.......
return new ResponseEntity<ProductV2>(product, HttpStatus.OK);
从例如邮递员测试时调用了正确的方法,但我得到一个 HTTP 406 Not Acceptable 作为响应。我一直在寻找几个地方,但我没有找到一个页面来很好地解释我需要做什么才能完成这项工作。
响应将像所有其他请求一样使用 json 解析,但响应对象被修改。 我们的想法是通过这样做,我们可以支持同一个 API 的多个“版本”,并且我们可以逐渐让客户端转移到新的 api,同时仍然可以访问相同的 uri/resource。
谁能指出一个很好的教程或分步指南如何在 spring boot 中解决这个问题?
我已阅读这篇文章:http://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc/#combined-controller 但我无法清楚地了解使其工作所需的内容
【问题讨论】:
-
在通过 Postman 发送的请求中是否有
Accept: productVersion2/json标头? -
是的,我愿意。如前所述,调用被定向到控制器中的正确方法,但是当我尝试返回 new ResponseEntity
(product, HttpStatus.OK); 时,它在最后一个方法调用中失败
标签: spring-mvc spring-boot contenttype