Estoy configurando dos diferentes API de Docket en una aplicación de inicio de primavera. Di un nombre de docket "Prueba" y dejar al otro, por lo que terminó como "predeterminado" en la interfaz de usuario de Swagger.

Mi pregunta es, cómo organizar el orden de estos Dockets en la UI.

Al principio, pensé que estaba dispuesto alfabéticamente, pero no lo es. Sigo cambiando el nombre, pero el pedido es desconocido.

    @Bean
    public Docket myAPI(){
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage("anything"))
            .paths(PathSelectors.regex("/v1/anything.*"))
            .build()
            .apiInfo(apiInfo());
        buildGlobalParameter(docket);
        buildGlobalResponseMessage(docket);
        return docket;
    }

    @Bean
    public Docket testAPI(){
        Docket tDocket = new Docket(DocumentationType.SWAGGER_2)
            .groupName("Test Card")
            .select()
            .apis(RequestHandlerSelectors.basePackage("anything"))
            .paths(PathSelectors.regex("/v1/anything2*"))
            .build()
            .apiInfo(apiTestInfo());
        buildGlobalParameter(tDocket);
        buildGlobalResponseMessage(tDocket);
        return tDocket;
    }

https://i.imgur.com/bmigkxe.jpg

Lo siento, no puedo publicar la imagen todavía, así que estoy dejando la URL directa.

Cuando ejecuto la aplicación de arranque de primavera, quiero que los interfaz de usuario de Swagger predeterminados se muestren para ser el "predeterminado".

2
chronos14 15 jul. 2019 a las 07:43

1 respuesta

La mejor respuesta

Los registros están ordenados alfabéticamente, por lo que son los expedientes de su ejemplo. Si los nombres de los grupos de DOCKets son "Prueba" y "Predeterminado", los DOPT se mostrarán en la página de UI de Swagger también en ese orden. En caso de que el nombre de su expediente con nombre explícitamente fue "Prueba" (en lugar de "Prueba" o "Tarjeta de prueba"), se mostrarán como lo esperaba.

La razón de ese comportamiento es que las cadenas están de forma predeterminada en comparación con el método String.compareTo(String) que distingue entre mayúsculas y minúsculas, teniendo en cuenta que, ya que los primeros caracteres de los nombres de la expediente de su ejemplo son 't' y 'd', expediente con nombre "PRUEBA" debería aparecer realmente antes de la persona con el nombre "Predeterminado" porque sus valores de Unicode son 84 y 100, respectivamente.

Por otro lado, la respuesta para su pregunta es lamentablemente negativa, especialmente si está usando Swagger2 o más. Hay propuesta / solicitud de tracción para eliminar la clasificación de Docket y ese cambio se incluirá en Swagger3 (de acuerdo con la respuesta del principal contribuyente actual de Springfox a la solicitud de extracción compartida). Por ahora, tiene 3 opciones sucias para lograr que se muestren los Dockets en el orden deseado:

  • Agregue el número correspondiente como prefijo al nombre de cada grupo de docket: use este enfoque, también debe definir el nombre explícito para su expediente predeterminado, por lo que su nombre podría ser como "1 predeterminado" y el nombre de otro docket sería "2 pruebas". Si tiene más de 9 expedientes, tenga en cuenta agregar cero líderes en caso de que inmediatamente después del prefijo / número se encuentre un carácter con un valor de Unicode superior a 58 (para que el espacio en blanco de este ejemplo no es necesario, ya que su valor es 32)
  • Agregue el número correspondiente de espacios como prefijo al nombre de cada grupo de docket (mayor será la cantidad, la posterior será la posición): esta es una solución bastante buena, ya que los espacios líderes harán el truco para ordenar los expedientes, pero lo harán Se recorte antes de visualizar, de modo que el menú desplegable en la interfaz de usuario de Swagger no sea de aspecto raro. Si está teniendo muchos Dockets y es la competencia para insertar manualmente una cantidad específica de espacios en literal de cadena de cada nombre de grupo, puede usar algunas de las soluciones para la repetición de caracteres de aquí
  • Si no puede esperar a Swagger3 y las opciones anteriores parecen demasiado sucias o como soluciones parciales para usted, puede extraer algunas clases de componentes de Swagger2 y adaptarlos en consecuencia, por lo que los DOCKETS no se mostrarán en el menú desplegable ordenado alfabéticamente ordenado , pero más bien en el mismo orden que se definió / inyectó con la anotación @Bean. En la Solicitud de pull y en sus comentarios puedes encontrar qué cambios menores Hay que hacerlo. Excepto exportando 2 clases mencionadas a su proyecto, también tendrá que extraer las clases usadas correspondientes con modificador de acceso no público. Nota: Si lo hagas todo bien, deberías terminar con exactamente 5 clases. Además, no se olvide de anotar las clases extraídas y personalizadas @Component con la anotación @Primary!
1
zeko868 23 oct. 2019 a las 19:08