Springboot整合jersey2-jaxrs、swagger,无法得到swagger.json(404页面)

新手上路,请多包涵

问题描述

通过Springboot整合jersey2-jaxrs、swagger形成在线文档,当访问本地swagger-ui.html时,只有描述,没有接口数据,以下两种方法都是同样的效果,

clipboard.png

而且

clipboard.png

问题出现的环境背景及自己尝试过哪些方法

尝试的的方法:

第一种、根据以下网站
http://www.bubuko.com/infodet...

我的项目:
clipboard.png

主依赖:

clipboard.png

clipboard.png

clipboard.png

clipboard.png

然后项目commom/web引入依赖

我的swagger类
package com.ygj.ucs.common.config;

import com.google.common.base.Predicate;
import io.swagger.annotations.ApiOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.SecurityScheme;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.Arrays;

import static com.google.common.base.Predicates.or;
import static springfox.documentation.builders.PathSelectors.regex;

@Configuration
@EnableSwagger2
@ComponentScan(basePackages={"com.ygj.ucs.biz.controller"})
public class SwaggerConfig {

@Bean

public Docket createRestApi()
{
    return  new Docket(DocumentationType.SWAGGER_2)
                    .groupName("用户服务中心API接口")
                    .apiInfo(apiInfo())
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.ygj.ucs.biz.controller"))
                    .paths(PathSelectors.any()).build();
}

private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
                    .title("UCS系统")
                    .description("用户服务中心接口").build();

}

/* @Bean
public SecurityScheme apiKey() {

   return new ApiKey("access_token", "accessToken", "header");

}

@Bean
public Docket apiConfig() {
    return new Docket(DocumentationType.SWAGGER_2).groupName("controller")
                    // 调用apiInfo方法,创建一个ApiInfo实例,里面是展示在文档页面信息内容
                    .apiInfo(apiInfo()).select()
                    // 控制暴露出去的路径下的实例
                    // 如果某个接口不想暴露,可以使用以下注解
                    // @ApiIgnore 这样,该接口就不会暴露在 swagger2 的页面下
                    .apis(RequestHandlerSelectors.basePackage("com.ygj.ucs.biz.controller")).paths(
                                    PathSelectors.any())
                    .build().useDefaultResponseMessages(false).securitySchemes(Arrays.asList(apiKey()));
}

@Bean
public Docket restConfig() {
    return new Docket(DocumentationType.SWAGGER_2).groupName("jax-rs").apiInfo(restInfo()).forCodeGeneration(true)
                    .pathMapping("/").select().paths(paths())// 过滤的接口
                    .build().useDefaultResponseMessages(false);
}

// 请求url匹配,支持and or,可以过滤筛选
private Predicate<String> paths() {
    return or(regex("/.*"), regex("/.*")); //
}

private ApiInfo apiInfo() {
    return new ApiInfoBuilder().title("berheley service controller api ")// 大标题
                    .description("spring boot webservice 平台 API")// 小标题
                    // .termsOfServiceUrl("http://ww.swagger.com/")
                    // .contact(new Contact("swagger", "www.swagger.com",
                    // "swagger@foxmail.com"))
                    .version("2.0").build();
}

private ApiInfo restInfo() {
    return new ApiInfoBuilder().title("berheley service rest api ")// 大标题
                    .description("spring boot webservice 平台 API")// 小标题
                    .version("2.0").build();
}*/

}

我的 JerseyConfig类

package com.ygj.ucs.biz.webapp;

import com.ygj.ucs.biz.controller.CompanyController;
import com.ygj.ucs.biz.controller.TestEsController;
import com.ygj.ucs.biz.controller.TestMqController;
import com.ygj.ucs.biz.controller.UserController;
import com.ygj.ucs.common.exception.GlobalExceptionHandler;
import io.swagger.jaxrs.config.BeanConfig;
import io.swagger.jaxrs.listing.ApiListingResource;
import io.swagger.jaxrs.listing.SwaggerSerializers;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.spring.scope.RequestContextFilter;
import org.glassfish.jersey.server.wadl.internal.WadlResource;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.ws.rs.ApplicationPath;

@Component
@ApplicationPath("ucs")
public class JerseyConfig extends ResourceConfig {

public JerseyConfig() {
    register(TestMqController.class);
    register(RequestContextFilter.class);
    register(UserController.class);
    register(CompanyController.class);
    register(TestEsController.class);
    register(GlobalExceptionHandler.class);
    /*register(WadlResource.class);
    register(JerseyAutoConfiguration.class);*/
    this.register(WadlResource.class);
    //packages("com.ygj.ucs.biz.controller");


}

@PostConstruct
public void init() {
    // Register components where DI is needed
    this.configureSwagger();
}

private void configureSwagger() {
    // Available at localhost:port/swagger.json
    this.register(ApiListingResource.class);
    this.register(SwaggerSerializers.class);
    BeanConfig config = new BeanConfig();
    config.setConfigId("springboot-jersey-swagger-docker-example");
    config.setTitle("Spring Boot + Jersey + Swagger + Docker Example");
    config.setVersion("v1");
    config.setContact("wzh");
    config.setSchemes(new String[] { "http", "https" });
    config.setBasePath("ucs");
    //config.setResourcePackage("com.ygj.ucs.common.config");
    config.setResourcePackage("com.ygj.ucs.biz.controller");
    config.setPrettyPrint(true);
    config.setScan(true);
}

}

controller类

clipboard.png

我的配置文件

server:
port: 8081

mybatis

mybatis-plus:
mapper-locations: classpath:config/mybatis/mapper/*Mapper.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.ygj.ucs.biz.domain
global-config:

# 数据库相关配置
db-config:
  #主键类型  AUTO:"数据库ID自增", INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
  id-type: AUTO
  #字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"
  field-strategy: not_empty
  #驼峰下划线转换
  column-underline: true
  #数据库大写下划线转换
  #capital-mode: true
  #逻辑删除配置
  logic-delete-value: 0
  logic-not-delete-value: 1
  db-type: mysql
banner: false

# 原生配置
configuration:

map-underscore-to-camel-case: true
cache-enabled: false

spring:

数据库配置

main:

allow-bean-definition-overriding: true

datasource:

type: com.zaxxer.hikari.HikariDataSource
username: root
password: rain1q2w3e4r5t
url: jdbc:mysql://114.55.60.160:3306/ucs
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
  maximum-pool-size: 20
  minimum-idle: 10
  register-mbeans: true
  allow-pool-suspension: true
  pool-name: ucs

单节点redis配置

redis:

database: 0
host: 114.55.60.160
port: 16379
connectionPoolSize: 100
pool:
  max-idle: 8
  min-idle: 0
  max-active: 8
  max-wait: -1

ssl:

cluster:

nodes:

sentinel:

master:

nodes:

timeout: 10000

RabbitMQ配置

rabbitmq:

host: 114.55.60.160
port: 5672
username: admin
password: r@bbitMQ

ygj:
test:

exchange: exchange_test
routingkey: routingkey_test
queue: queue_test

user:

exchange: exchange_ucs_user
routingkey: routingkey_ucs_user
queue: queue_ucs_user

ES 相关配置

es:
server:

addresses: 114.55.60.160
port: 9200

user:

path: /ucs-user/user/

logging:
level:

com:
  ygj:
    ucs: debug

第二种:

根据github上代码 https://github.com/Hafiz77/In... 不用SwaggerConfig类

依赖只保留,添加静态文件

clipboard.png

clipboard.png

配置多加了 ,但被废弃了
clipboard.png

访问 json数据
clipboard.png

JerseyConfig保持不变

package com.ygj.ucs.biz.webapp;

import com.ygj.ucs.biz.controller.CompanyController;
import com.ygj.ucs.biz.controller.UserController;
import com.ygj.ucs.common.exception.GlobalExceptionHandler;
import io.swagger.jaxrs.config.BeanConfig;
import io.swagger.jaxrs.listing.ApiListingResource;
import io.swagger.jaxrs.listing.SwaggerSerializers;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.spring.scope.RequestContextFilter;
import org.glassfish.jersey.server.wadl.internal.WadlResource;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.ws.rs.ApplicationPath;

@Component
@ApplicationPath("ucs")
public class JerseyConfig extends ResourceConfig {

public JerseyConfig() {
    register(RequestContextFilter.class);
    register(UserController.class);
    register(CompanyController.class);
    register(GlobalExceptionHandler.class);
    /*register(WadlResource.class);
    register(JerseyAutoConfiguration.class);*/
    this.register(WadlResource.class);
    //packages("com.ygj.ucs.biz.controller");


}

@PostConstruct
public void init() {
    // Register components where DI is needed
    this.configureSwagger();
}

private void configureSwagger() {
    // Available at localhost:port/swagger.json
    this.register(ApiListingResource.class);
    this.register(SwaggerSerializers.class);
    BeanConfig config = new BeanConfig();
    config.setConfigId("springboot-jersey-swagger-docker-example");
    config.setTitle("Spring Boot + Jersey + Swagger + Docker Example");
    config.setVersion("v1");
    config.setContact("wzh");
    config.setSchemes(new String[] { "http", "https" });
    config.setBasePath("ucs");
    //config.setResourcePackage("com.ygj.ucs.common.config");
    config.setResourcePackage("com.ygj.ucs.biz.controller");
    config.setPrettyPrint(true);
    config.setScan(true);
}

}

阅读 3.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题