我有一个与Jersey一起发布的REST API,并用Swagger进行了文档记录,我还有一个使用该API的Swagger UI安装。
我几乎所有的操作都会生成application/json并按预期工作,除了一个GET操作会生成:“text/plain;字符集=utf-8'
当我尝试从Swagger UI调用服务时,服务器会记录一个javax.ws.rs.NotAcceptableException并返回一个406响应。如果我从REST客户端调用相同的服务,它会按预期工作。
@GET
@Path("/text")
@Produces(MediaType.TEXT_PLAIN + ";charset=utf-8")
@ApiOperation(value= "Return text")
public Response getText(@QueryParam("user") String user) {
return Response.ok(textService.getTextForUser(user)).build();
}
如果我更改为@Produces(MediaType.APPLICATION_JSON"; charset=utf-8"),那么它可以正常工作,但我不想设置错误的内容类型。
问题似乎在于,Swagger UI错误地将Accept标头设置为application/json,通过观察请求可以看出:
GET /supertext/text?user=1
...
Accept: application/json
使用rest客户端时,接受标头是:
GET /supertext/text?user=1
...
Accept: */*
为什么Swagger UI没有正确设置Accept标头?
这个可以配置吗?
我也遇到了同样的问题,但解决方案有所不同。
问题出在一个不相关的控制器上,它的映射没有正确定义。
启动spring boot应用程序时,我可以看到如下日志:
([]) Mapping with class UnrelatedController
每当我加载Swigger UI时,都会发出一个请求Swigger的API,但是会显示对该API的响应,这与Swigger所期望的不匹配。
因此出现错误406
解决方案是纠正UnrelatedController的映射,一切都像以前一样工作。感谢Git历史!
似乎swagger用户界面在发现@Produces注释包含单个值时将接受标头设置为Application/json,否则它会在用户界面中呈现下拉列表以从可用内容类型中进行选择。
在swagger ui中。js公司:
opts.responseContentType = $("div select[name=responseContentType]", $(this.el)).val();
当下拉列表不存在时,属性将变为未定义。
在代码的后面,如果属性为null或未定义,则响应内容类型设置为application/json:
在swagger.js:
if (this.type === "POST" || this.type === "GET" || this.type === "PATCH") {
if (this.opts.responseContentType) {
responseContentType = this.opts.responseContentType;
} else {
responseContentType = "application/json";
}
}
因此,我的解决方案是修改swagger-ui.js中的代码,以确保设置了正确的内容类型,方法是探索生产数组并选择第一个元素作为响应内容类型:
在swagger ui中。js替换线路:
opts.responseContentType = $("div select[name=responseContentType]", $(this.el)).val();
使用:
if($("div select[name=responseContentType]", $(this.el)).val() === undefined) {
opts.responseContentType = opts.parent.model.produces[0];
}
else {
opts.responseContentType = $("div select[name=responseContentType]", $(this.el)).val();
}
这似乎很奇怪,这并不像我预期的那样有效。我编写了一个简单的java类,它实现了可比接口并重写了compareTo()方法。但是,它不允许我传递Object以外的特定类型的参数。我在网上查看了其他人的代码,他们确实使用了其他类型的对象,我将他们的代码复制到eclipse中,但我仍然得到了同样的错误。 我的问题是;我必须做什么来比较这个对象和类型的对象,让我们说Person。比较器接口(compare
我的pom.xml 招摇过市配置 服务器日志 它说映射: 但这些都不起作用(404): 如果我使用sping-fox较低版本,那么我将在我的日志中得到它已映射{[/v2/api-docs}],方法=[GET]。但是,我看不到在那里生成的任何json。
我试图通过Swagger UI记录在供应商产品(WSO2 ESB)中开发的现有API服务,以供公司内部使用。供应商产品不支持招摇过市。我计划以编程方式检查/处理API服务的源代码(编写在供应商产品中),并在中生成一个包含swagger定义文件的目录/文件夹/库。json或。yml格式。那很好,我能做到。 这些api定义文件中的每一个都将在swagger UI中很好地呈现,我正在考虑使用https:
我试图在我的微服务项目中生成一个单独的招摇过市,在Api网关中将所有服务招摇过市聚合成一个单独的招摇过市。为了实现这一点,我将遵循下一个教程https://objectpartners.com/2017/09/28/aggregate-services-into-a-single-swagger 这里的问题是,当我尝试设置绝对URL时,我收到的输出是未能加载API定义。未定义的http://loc
如何仅显示类型为GET in Swagger page的API并隐藏其他API?我发现属性ApiExplorerSettings(IgnoreApi=true)可以从Swagger页面隐藏API,但是我有很多API要隐藏,我需要一种根据其HTTP类型隐藏API的方法。我尝试过这种方法: 但没用
我使用Springfox从Spring Boot REST控制器生成了Swagger API规范。 我注意到一个问题,示例值/模型无法显示响应。 作为调查,我在http://localhost:8080/v2/api-文档,并在https://editor.swagger.io/,它也无法显示示例值/模型。这似乎是由于模式没有正确引用模型对象(“Car”)造成的。 但是从Swagger的API文档