从swagger.io编辑器页面下载了Swagger宠物商店(简单)并做了一个mvn jetty:run
在Chrome上打开DevTools并执行GET时,我没有看到标题Content-Type字段被设置。
这是在GET / pets {id}
上
答案 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标头的原因。