Swagger Codegen - GET的内容类型未在Spring-MVC中生成

时间:2015-11-04 00:22:40

标签: swagger swagger-ui springfox

从swagger.io编辑器页面下载了Swagger宠物商店(简单)并做了一个mvn jetty:run

在Chrome上打开DevTools并执行GET时,我没有看到标题Content-Type字段被设置。

这是在GET / pets {id}

screen capture

3 个答案:

答案 0 :(得分:11)

好的,感谢这个问题的根本原因,感谢github上的swagger codegen项目中的wing328。

事实证明,在我们的yaml定义文件的顶部,我们有:

consumes:
 - application/json

这导致所有生成的控制器方法在内容类型上期望application / json。这打破了GET,DELETE和PATCH api调用,在我们的例子中没有任何有效负载。

答案 1 :(得分:0)

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

  

14.17内容类型

     

Content-Type entity-header字段表示媒体类型   实体主体发送给收件人,或者在HEAD方法的情况下,   如果请求是GET,则会发送的媒体类型。          Content-Type =" Content-Type" ":"媒体类型

Content-Type是请求上下文中无意义的标头。 对于" GET"因为请求没有正文。

如果您可以为Chrome和curl发布请求和响应标头和正文,我或许可以为您解决此问题。

话虽如此,查看StackOverflow会很快告诉我,Spring可能会因为与内容编码无关的多种原因而引发此错误。例如(例如)您尝试序列化的对象缺少参数较少的构造函数。

您是否有任何记录设置可以跟踪InnerExceptions和堆栈以查看基本错误是什么?

这是Spring在我的应用程序(而不是petstore)中所做的事情。你想要我的应用程序的swagger ui页面的屏幕截图吗?

感谢您查看此Roger。

ficom

答案 2 :(得分:0)

根据HTTP / 1.1规范,GET或DELETE请求均不应具有消息正文,如果消息正文具有消息正文,则服务器应忽略该消息正文。我认为这就是为什么swagger-UI不会发送带有GET或DELETE请求的Content-Type标头的原因。

更多内容:https://tools.ietf.org/html/rfc2616#section-4.3