Spring boot 有解决内容协商的简单方法吗

Is there a simple way to solve content negotiation in Spring boot

我们计划使用内容类型否定作为我们其余版本控制的一种形式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 进行解析,但响应对象已修改。 我们的想法是,通过这样做,我们可以支持多个 "versions" 相同的 API,并且我们可以逐渐让客户转移到新的 api,同时仍然拥有相同的 uri/resource ] 访问。

任何人都可以指出如何在 spring 引导中解决此问题的良好教程或分步指南吗?

我已阅读这篇文章:http://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc/#combined-controller 但我无法清楚地了解使其工作所需的条件

您的媒体类型有误。要将自定义媒体类型用于 API 版本控制,您可以使用 application/productVersion2+json 而不是 productVersion2/json。我怀疑你得到 406 是因为 Spring Boot 无法找出如何将你的对象序列化为 JSON 因为 productVersion2/json 不是 json 数据的有效媒体类型.

选择媒体类型的方法不止一种,我在 google 上搜索了一份更全面的文档 here