我们正在使用Spring 4.x 和 swagger-jersey2-jaxrs_2.10。Swagger 不会列出我的 API,它总是只返回版本详细信息。
pom.xml
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-jersey2-jaxrs_2.10</artifactId>
<version>1.3.13</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.23.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.23.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.23.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.23.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
<version>2.23.2</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
</exclusions>
</dependency>
web.xml
<filter>
<filter-name>SpringApplication</filter-name>
<filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>xxx.xxx.xxx.filter.JerseyApiSpringFilter</param-value>
</init-param>
<init-param>
<param-name>jersey.config.servlet.filter.forwardOn404</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>jersey.config.servlet.filter.staticContentRegex</param-name>
<param-value>/docs/.*</param-value>
</init-param>
</filter>
资源类
@Path("/listApi")
@Component
@Scope("request")
@Api(value = "/listApi", description = "List API")
@Produces({"application/json"})
public class ListApiResource {
@GET
@Path("/")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Retrieve all list of apps", response = listDto.class)
public Response getAllApps (@QueryParam("appId") int appId) {
// code
}
}
ResourceConfig类
public class JerseyApiSpringFilter extends ResourceConfig {
static {
// JaxrsApiReader.setFormatString("");
}
public JerseyApiSpringFilter() {
packages("com.xxx.xxxx.xxxxxx.resources");
register(RequestContextFilter.class);
register(ApiListingResource.class);
register(ApiListingResourceJSON.class);
register(JerseyApiDeclarationProvider.class);
register(JerseyResourceListingProvider.class);
register(MultiPartFeature.class);
register(JacksonFeature.class);
}
我的应用程序基路径/api-docs返回
{
"apiVersion": "1.0.0",
"swaggerVersion": "1.2",
}
我有同样的问题,用了下面这样的东西。
我有一个bean,其中包含在应用程序启动时通过配置生成的可能值列表。Swagger应该显示列表,但这不起作用。
@GET
@Path("info/types")
@PermitAll
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Possible bean types", notes = "List all available bean types",
response = BeanTypesList.class, responseContainer = "List")
@ApiResponses(value = { @ApiResponse(code = 200, message = "List of all available bean types",
response = BeanTypesList.class) })
@Timed
@ExceptionMetered
@CacheControl(maxAge = 6, maxAgeUnit = TimeUnit.HOURS)
public List<BeanType> getBeanTypes() throws JsonProcessingException {
return new ArrayList<BeanType>(BeanType.values());
}
public class SwaggerClassHelper {
@ApiModel(value = "BeanTypesList", description = "Overview of possible bean types")
public class BeanTypesList {
@ApiModelProperty(value = "List of several possible bean types.", required = true)
private List<BeanType> types;
@JsonCreator
public BeanTypesList(
List<BeanType> types) {
this.types = types;
}
public List<BeanType> getTypes() {
return this.types;
}
@JsonIgnore
@Override
public String toString() {
return ReflectionToStringBuilder.toString(this);
}
}
}
@ApiModel(value = "Bean type", description = "Represents the type of a bean.")
public final class BeanType {
@JsonIgnore
private static Set<String> names = new HashSet<String>();
@JsonProperty("name")
private String name;
private BeanType(
List<String> names) {
synchronized (BeanType.names) {
BeanType.names.addAll(names);
}
}
private BeanType(
String name) {
this.name = name;
}
//... other methods
}
我知道如果使用swagger,这不是我们想要的解决方案,但是您可以通过响应字段指定输入/输出!
尝试将其添加到资源类(构造函数)中:
register(ApiListingResource.class);
register(SwaggerSerializers.class);
BeanConfig beanConfig = new BeanConfig();
beanConfig.setVersion("1.0.0");
beanConfig.setSchemes(new String[]{"http"});
beanConfig.setBasePath("/api"); //or insert your base path (see main Jersey app class)
beanConfig.setResourcePackage("com.xxx.where.your.endpoints");
beanConfig.setScan(true);
beanConfig.setPrettyPrint(true);
有人能告诉我为什么列表返回空吗?我的xpath是准确的,因为我重新检查了它,但我仍然无法迭代它,而调试for循环甚至没有执行。我不确定我哪里出了问题。
问题内容: 我正在尝试编写一个用于与last.fm API进行交互的小脚本。 我有一点使用的经验,但是以前使用它的方式似乎无效,而是返回一个空列表。 我删除了API密钥,因为我不知道它到底应该有多私密,并举了一个示例,说明了我在该位置接收的XML。 与API交互的类: 调用的get_now_playing方法: 我收到的xml样本: 问题答案: 问题在于, 如果给定标签名称,则仅搜索元素的直接后代
我试图用刮擦和飞溅来刮取衣服的图像和一些产品信息。我想得到的形象,只有产品(所以没有模型)。比如这张照片https://www2.hm.com/nl_nl/productpage.0220094001.html 然而,如果我试图让src在Scrapy shell中 回答xpath('//figure[包含(@class,“secondary”)]///img//@src')。摘录() 返回一个空列
如果我跑: 我会得到一张空名单。我猜它与名称空间有关,但我不知道如何修复它。
我有一个Postgres函数,它返回一个表“RestURNS TABLE......” 代码中有一些商业规则。如果不满足某些条件,我只想返回一个空记录集。有没有简单的方法?或者我需要为返回的每个列选择一个NULL吗? 现在,若我尝试只返回NULL,它会抱怨:错误:查询的结构和函数结果类型不匹配。
问题内容: 我在Android中有一个客户端应用程序,用于将文件发送到服务器。服务器使用Apache Commons FileUpload API来解析表单数据值。 该发送该请求: 服务器代码: 问题就在这里。返回的列表为空,我无法获取表单数据值。 问题答案: 如果您已经(隐式)预先解析了请求正文,则此位置将为空。HTTP请求正文只能被读取/解析 一次 (因为客户端仅发送一次,并且不会多次发送)。