Spring mvc 有没有一种简单的方法来解决Spring boot中的内容协商

Spring mvc 有没有一种简单的方法来解决Spring boot中的内容协商,spring-mvc,spring-boot,contenttype,Spring Mvc,Spring Boot,Contenttype,我们计划使用内容类型协商作为RESTAPI版本控制的一种形式,但它似乎比应该的更复杂。 给出以下示例代码: @RestController @RequestMapping("/products") ProductController { ....... @RequestMapping(value = "/{productID}", method = RequestMethod.GET, produces = "productVersion2/json") public ResponseEntit

我们计划使用内容类型协商作为RESTAPI版本控制的一种形式,但它似乎比应该的更复杂。 给出以下示例代码:

@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);
@RestController
@请求映射(“/products”)
产品控制器{
.......
@RequestMapping(value=“/{productID}”,method=RequestMethod.GET,products=“productVersion2/json”)
公共响应属性getVersion2(@PathVariable String productID){
.......
返回新的响应状态(产品,HttpStatus.OK);
当从例如postman进行测试时,调用了正确的方法,但是我得到一个HTTP 406作为响应是不可接受的。我已经查找了好几个地方,但是我没有找到一个页面,上面有我需要做什么才能使这项工作正常进行的很好解释

与所有其他请求一样,将使用json解析响应,但会修改响应对象。 我们的想法是,通过这样做,我们可以支持同一API的多个“版本”,并且我们可以逐渐使客户机转向新的API,同时仍然可以访问相同的uri/资源

有谁能指出一个好的指导或一步一步的指导,如何解决这个问题,在春季开机

我读过这篇文章:
但是我无法清楚地了解使其工作所需的内容

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


选择媒体类型的方法不止一种,我在谷歌上搜索了一个更全面的文档。

在通过Postman发送的请求中是否有
Accept:productVersion2/json
头?是的,我有。如前所述,该调用被定向到控制器中的正确方法,但在我尝试执行r时,在最后一次方法调用中失败eturn new ResponseEntity(产品,HttpStatus.OK);非常感谢。它现在起作用了:)令人沮丧的是,这么简单的事情可能会阻止我,但francly,我没有找到太多描述这个问题的资源。顺便说一句,你找到了一篇很棒的文章。与同事分享:)