我们试图让Swagger与我们的resteasy应用程序进行交互,以便api将在swagger页面上列出 . 我们在Java资源中使用注释而不是yaml / json文件 . 我们希望内容“动态”或直接来自资源页面 .

当我们打开招摇页面时,我们收到消息'抓取资源列表://10.155.63.136/nodeMgmt' . 当我使用firebug渲染页面时,我发现页面本身(index.html)正在被“输入”内容 .

我觉得我很接近,但我错过了一两件小事 . 我用这个例子作为我做的指南:https://github.com/mrj365/RestEasy-3.09-Spring-3.2.5-Swagger2.0

同样,问题是来自resteasy api的内容没有被投入到招摇的ui中 . 我的网址是https://10.155.63.92/nodeMgmt/index.html

我们使用JBoss 6.4,NO Spring,Resteasy 3.0.7,Swagger jaxrs 1.5.9 .

任何帮助都非常感谢 .

的index.html

<script type="text/javascript">
    $(function () {
        window.swaggerUi = new SwaggerUi({
        url: "/nodeMgmt",
        dom_id: "swagger-ui-container",
        supportedSubmitMethods: ['get', 'post', 'put', 'delete'],
        onComplete: function(swaggerApi, swaggerUi){
            log("Loaded SwaggerUI");

            $('pre code').each(function(i, e) {
                hljs.highlightBlock(e)
            });
        },
        onFailure: function(data) {
            log("Unable to Load SwaggerUI");
        },
        docExpansion: "none"
    });

web.xml中

<!-- Auto scan REST service -->
   <context-param>
      <param-name>resteasy.scan</param-name>
      <param-value>true</param-value>
   </context-param>

   <context-param>
      <param-name>resteasy.servlet.mapping.prefix</param-name>
      <param-value>/nodes</param-value>
   </context-param>


  <filter>
    <filter-name>ApiOriginFilter</filter-name>
    <filter-class>com.sonus.unity.sonusbaserestservice.utils.ApiOriginFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>ApiOriginFilter</filter-name>
    <url-pattern>/index.html</url-pattern>
  </filter-mapping>

   <!-- if you are using Spring, Seam or EJB as your component model, remove the ResourceMethodSecurityInterceptor -->
   <context-param>
      <param-name>resteasy.resource.method-interceptors</param-name>
      <param-value>
         org.jboss.resteasy.core.ResourceMethodSecurityInterceptor
      </param-value>
   </context-param>

   <listener>
      <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
   </listener>

   <servlet>
      <servlet-name>Resteasy</servlet-name>
      <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
             <init-param>
                <param-name>javax.ws.rs.Application</param-name>
                <param-value>com.sonus.ems.nodemgmt.web.NodeMgmtApplication</param-value>
            </init-param>
   </servlet>

   <servlet-mapping>
      <servlet-name>Resteasy</servlet-name>
      <url-pattern>/nodes/*</url-pattern>
   </servlet-mapping>

application.java

@ApplicationPath("")
public class NodeMgmtApplication extends SonusBaseRestApplication  {
    private static final Logger log = Logger.getLogger(NodeMgmtApplication.class);

    /**
     *  Constructor
     */
    public NodeMgmtApplication() {
        super();

        try {
            //TODO Swagger
            // Used for defining swagger
            BeanConfig beanConfig = new BeanConfig();
            beanConfig.setSchemes(new String[]{"http"});
            beanConfig.setHost("localhost:8080");
            beanConfig.setVersion("1.5.9");
            beanConfig.setBasePath("/nodeMgmt");
            beanConfig.setResourcePackage("com.sonus.ems.nodemgmt.web");
            //beanConfig.setPrettyPrint(true);
            beanConfig.setScan(true);

            addService(new NodeMgmtAuthorizationFilter());
            addService(new NodeMgmtRestService());

            // Swagger
            addService(new ApiListingResource());
            addService(new SwaggerSerializers());
        } catch (Exception e) {
            log.error("NodeAdminApplication: Could not instantiate singletons " + e);
        }
    }

resource.java

@Path("/")
@Api(value = "/", description = "Node operations", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
public class NodeMgmtRestService {
    private static final Logger log = Logger.getLogger(NodeMgmtRestService.class);

    private static final String NODES = "nodes";
    private static final String ID = "id";


    NodeMgmtServiceProvider nodeMgmtServiceProvider = new NodeMgmtServiceProvider();

    Service nodeMgmtService;


    @GET
    @Path("/{version}")
    @Produces(MediaType.APPLICATION_JSON)
    @ApiOperation(value = "Get all nodes", notes = "Returns a list of node", response = String.class, responseContainer="List")
    public Response getNodes(
            @ApiParam(value = "Version of api (1.0)", required = true) @PathParam("version") String version,
            @ApiParam(value = "Filter by ", required = true) @QueryParam("filterParam") String filterParam,
            @ApiParam(value = "Filter value ", required = true) @QueryParam("filterValue") String filterValue) {
        List<Node> nodeList = new ArrayList<Node>();
        List<Object> nodeJsonList = new ArrayList<Object>();
        Map<String, List<Object>> nodeJsonMap = new HashMap<String, List<Object>>();
        ObjectMapper objectMapper = new ObjectMapper();
        Map<String, String> responseId = new HashMap<String, String>();
        JsonNodeDao jsonNodeDao = new JsonNodeDao();

Swagger API密钥

public class ApiOriginFilter implements Filter {

    @Override
      public void doFilter(
              ServletRequest request, 
              ServletResponse response,
              FilterChain chain) throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) response;

        // Add access to the header 
        res.addHeader("Access-Control-Allow-Origin", "*");
        res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, PATCH, OPTIONS");
        res.addHeader("Access-Control-Allow-Headers", "Content-Type, api_key, Authorization");
        //res.addHeader("Access-Control-Allow-Headers", "Origin, X-Atmosphere-tracking-id, X-Atmosphere-Framework, X-Cache-Date, Content-Type, api_key, Authorization, X-Atmosphere-Transport, x-requested-with, Total-Count, Total-Pages, Error-Message, *");
        //res.addHeader("Access-Control-Request-Headers", "Origin, X-Atmosphere-tracking-id, X-Atmosphere-Framework, X-Cache-Date, Content-Type, api_key, Authorization, X-Atmosphere-Transport, x-requested-with, Total-Count, Total-Pages, Error-Message,  *");

        chain.doFilter(request, response);
      }

      @Override
      public void destroy() {
      }

      @Override
      public void init(FilterConfig filterConfig) throws ServletException {
      }