Whitelabel error page swagger

Here is my code: I am getting all the values from application.properties file SwaggerConfig.java @Configuration @EnableSwagger2 @Profile("!prod") @PropertySource(value = { "classpath:application.

I’m bad at English, that’s why GoogleTranslate.

That version and way of doing it is already a bit outdated, if you want the documentation to be generated automatically, SpringDoc simplifies the generation and maintenance of API documents, based on the OpenAPI 3 specification, for Spring Boot 1.x and 2.x. applications.

For magic to happen we simply add the dependency to our pom:



    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-ui</artifactId>
        <version>1.2.32</version>
    </dependency>

then access the description that already has it http://localhost:8080/v3/api-docs/

and for swagger: http://localhost:8080/swagger-ui.html

that’s all there is to it.

for more detail

if you want to customize the api information you can include java style annotations:



    @OpenAPIDefinition(
        info = @Info(
                 title = "API personas", 
                 description = "Este es un ejemplo de servidor Personas-Server."
            + "Usted puyede encontrar mas acerca de Swagger " ++"[http://swagger.io](http://swagger.io) o en "
            + "[irc.freenode.net, #swagger](http://swagger.io/irc/).",
            termsOfService = "http://swagger.io/terms/", 
              license = @License(
                          name = "Apache 2.0", 
                          url = "http://springdoc.org"), 
       version = "otra"
    ))
    @Tag(name = "persona", description = "API para personas")
    @RestController
    @RequestMapping("persona")
    public class PersonaRest extends GeneralRest {}

can also be generated for special methods:



     @Operation(
         summary = "traer todas las personas", 
         description = "api para traer todas las personas, aqui no se tienen en cuenta paginaciones, ni filtros, trae todos los registros", 
         tags = { "persona" }
         )
     @ApiResponses(
         value = {
         @ApiResponse(
             responseCode = "200", 
             description = "Operación exitosa", 
             content = @Content(
                 mediaType = "application/json", 
                 array = @ArraySchema(
                     schema = @Schema(
                         implementation = PersonaTO.class
                         )))),
         @ApiResponse(
             responseCode = "401", 
             description = "Sin autorización", 
             content = @Content(
                 mediaType = "application/json", 
                 schema = @Schema(
                     implementation = Object.class
                     ))),
     })
     @GetMapping
     public List personas() {
            return personaServicio.obtenerTodo();
        }

it is always good practice to use the most recent libraries and inclusions.

Содержание

  1. Русские Блоги
  2. Основная причина страницы ошибки SpringBoot Whitelabel, три решения и их характеристики
  3. 0, краткое описание
  4. 1. Страница ошибки Whitelabel
  5. 2. Решите проблему с белой страницей.
  6. How to resolve Whitelabel Error Page in Spring Boot
  7. 1. Custom Error Controller
  8. 2. Displaying Custom Error Page
  9. 3. Disabling the Whitelabel Error Page
  10. Spring Boot Whitelabel Error
  11. Advertisements WhiteLabel Error Page
  12. Spring Boot Custom Error Page
  13. Advertisements Spring Boot Custom Error Page example
  14. Весенняя загрузка: Настройка Страницы с ошибкой Белой Метки
  15. 1. Обзор
  16. 2. Отключение страницы с ошибкой белой метки
  17. 3. Отображение Пользовательских Страниц Ошибок
  18. 3.1. Пользовательский контроллер ошибок
  19. 4. Заключение

Русские Блоги

Основная причина страницы ошибки SpringBoot Whitelabel, три решения и их характеристики

0, краткое описание

Перед изучением этой заметки лучше всего иметь некоторое представление о Spring mvc и Tomcat, чтобы было удобнее понимать.Если вам нужно знать наиболее прямое решение, перетащите его вниз, чтобы увидеть образец кода.

Вводится настоящая причина появления белой страницы Springboot. Основная причина заключается в том, что нет подходящей ситуации соответствия и возникает ситуация 404. Затем перейдите к системной по умолчанию сначала ErrorPage, которая представляет собой содержимое белой страницы, а затем с трех точек зрения в соответствии с его спецификой. , 1. Перехватчик, 2. Новая страница ошибок, 3. Пользовательская маршрутизация / маршрутизация ошибок для решения проблемы, а также знакомство с преимуществами и недостатками каждого метода, включая основные причины ошибок страницы цикла и т. Д.

1. Страница ошибки Whitelabel

То, что называется страницей ошибок Whitelabel (также называемой белой страницей), является страницей описания аномального HTTP-запроса в SpringBoot, как показано ниже.

Содержимое белой страницы будет отображать код состояния, путь и причину ошибки, но реальная среда публикации онлайн-генерации обычно не допускает такой ситуации, и больше — это настраиваемые страницы 404 или 500 страниц.

Итак, теперь мы пришли к пониманию, в какой ситуации будут появляться белые страницы и как решить эту проблему. Давайте воспользуемся случаем 404, чтобы понять причину.

Перейти непосредственно к классу DispatcherServlet protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception Метод, содержащий фрагменты кода

В методе getHandler будет выполняться обход HandlerMapping в текущем веб-контейнере, чтобы найти соответствующий обработчик

Из приведенного выше рисунка очевидно, что текущий удобный обработчик — SimpleUrlHandlerMapping, потому что URL-адрес содержит /** , Все URL-адреса могут быть сопоставлены, Не войдет в noHandlerFound позади , Обработчик адаптации HandlerAdapter — это объект, созданный HttpRequestHandlerAdapter.

Не удается найти соответствующий ресурс в mv = ha.handle (loadedRequest, response, mappedHandler.getHandler ()), установите код состояния ответа на 404Подробнее см. Метод handleRequest класса ResourceHttpRequestHandler.

Теперь это эквивалентно установке кода состояния запроса на 404, больше ничего не делается, mv также равно null

В это время вам нужно вернуться к процессу вызова Tomcat. Если вы запрашиваете процесс вызова Tomcat, вы должны знать, что когда Tomcat получает запрос сокета Socket на соединителе, он упаковывается в запрос, ответ и другую информацию, которая будет отправлена ​​в Engine-> Host и другие компоненты. Он доставляется слой за слоем, затем принимается конвейером каждого компонента, а затем фильтруется соответствующим клапаном (клапаном) слой за слоем.

На этот раз дошел до класса StandardHostValve private void status(Request request, Response response) метод

Объедините код и диаграмму, а затем внимательно прочтите белую страницу. This application has no explicit mapping for /error , Маршрут error, причина отсюда, а затем переход вперед, адрес маршрута error

Белая страница mv, предоставляемая SpringBoot, используется позже для визуализации содержимого белой страницы, которую мы видим.

Пока что весь процесс выполнен,Подводя итог, это запрос несуществующей ссылки, которая перенаправляется в запрос / error после того, как обнаруживается, что это запрос 404.

Тогда решение очень простое, есть три решения, но эти три решения под разными углами, чтобы решить проблему.

  • Добавить перехватчик
  • Добавить ErrorPage
  • Добавить / путь ошибки

2. Решите проблему с белой страницей.

2.1, добавить перехватчик

После того, как перехватчик перехватит запрос / error, он вынужден изменить mv, так что последний отрендеренный mv для пробного использования является нашей настраиваемой настройкой, а не содержимым белой страницы, где mv самой белой страницы будет проходить Анализатор представления ContentNegotiating Обработка становится ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration

Обратите внимание, что все это истечение фактически было обработано 3 HTTP-запросами,На следующем рисунке показана информация журнала, распечатанная с использованием мониторинга событий HTTP.

Пройдите через / abc ==> jump / err ==> jump / error (содержимое не отображается, потому что содержимое, отправленное в браузер, было отображено с помощью / err

Реальный поток обработки вызовов состоит в том, что / abc не находит подходящий обработчик, а затем решает передать его на путь / error для обработки, но он перехватывается перехватчиком и перенаправляется в / err для обработки.

Недостатки: все запросы для этого маршрута будут перехвачены, включая статические файлы ресурсов, что не оказывает большого влияния на внутренние службы, которые предоставляют чистые интерфейсы. Другие службы будут иметь влияние

2.2, добавьте ErrorPage

Добавление подходящей ErrorPage не приведет к переходу к пути по умолчанию / ошибке перехватчика, а перейдет к настраиваемой ErrorPage. Причина этого была указана в методе статуса выше.

В приведенном выше коде добавлено несколько путей перехода к странице ошибки ErrorPage и соответствующие им коды ошибок HTTP. В нашем текущем примере должен быть выполнен переход к соединению / 404, а затем как я могу получить сообщение об ошибке после его выполнения? В принципе, он должен отображать 404 Содержимое файла .html и классическая страница ошибок Tomcat отображаются одновременно, как показано на следующей странице, и содержимое вывода журнала.

Это проблема скачка петли

Когда в системе не указан преобразователь четкого представления, система будет использовать свой собственный преобразователь по умолчанию. InternalResourceView , Он проверит текущий URL-адрес перед отображением. Если обнаружится, что запрошенный URL-адрес соответствует целевому URL-адресу, он будет определен Вперед сам появляются Circular view path Эта проблема

Итак, как ее решить, нужно исходить из фундаментальной цели

  • Добавьте синтаксический анализатор шаблона, чтобы синтаксический анализатор по умолчанию не использовался
  • Изменить путь перехода

Вы можете понять конкретные решения самостоятельно.В этой статье не используется отрисовка механизма шаблонов, а непосредственно отображаются основные данные.

2.3, путь добавления / ошибки

Как вы знаете выше, поскольку система по умолчанию переходит к / error и завершает рендеринг данных, недостаточно настроить маршрут / error и избежать проблемы отсутствия статических ресурсов, но обратите внимание, что есть Один вопрос, подробности см. На рисунке ниже

Во-первых, я добавил и определил очень простой метод обработки пути ошибки, но при запуске Springboot есть 3 метода обработки пути ошибки, и они одновременно принадлежат одному и тому же дескриптору. Правила маршрутизации URL Обработка, выберите ручку в автоконфигурации,Это должно было привести к тому, что наш заказ / ошибка недействительны

После тестирования он действительно недействителен, и белая страница все еще отображается, так как это решить? Есть несколько способов сделать то же самое

    В соответствии с правилами сопоставления маршрутизации измените соответствующий контент, чтобы при окончательном выборе процессора он достиг нашего пользовательского процессора, но это очень сложно. Вам необходимо очень четко понимать правила сопоставления маршрутизации самого Spring mvc, чтобы гарантировать, что сопоставление URL-адресов Приоритетные вопросы, требующие решения, и т. Д.

Мы уже знаем, что эти три / ошибки находятся в картографе маршрутов RequestMappingHandlerMapping.Мы можем сделать так, чтобы пользовательский процессор не сохранялся в карте маршрутов, и сделать Spring приоритетом согласованного преобразователя маршрутов при опросе. Да, но на самом деле BeanNameUrlMapping в handlerMapping все еще находится после RequestMappingHandlerMapping, если вы измените порядок, это также очень сложно

EndpointHandlerMapping — это конечная точка в исполнительном модуле Springboot. Настроить конечную точку сложно, и она не подходит для текущего проекта.

Использование SimpleUrlHandlerMapping не подходит для Springboot. Если вы используете конфигурацию xml, вы можете напрямую установить ее URL-адрес. Это будет очень удобно. Если вы применяете метод аннотации в springboot, требуется дополнительная настройка, как показано в следующем коде

Хотя / error вводится в SimpleUrlHandlerMapping, он все равно будет отображаться, даже если добавлена ​​дополнительная конфигурация Нет ошибки адаптера ,Этот метод не применим

Оглядываясь назад на наблюдение BasicErrorController, мы можем унаследовать интерфейс ErrorController сами.

Источник

How to resolve Whitelabel Error Page in Spring Boot

In this article, we will explore how to handle Whitelabel Error Page in Spring Boot application. During the development of Spring application, sometimes we face the Whitelabel Error Page and Spring Framework suggests us ‘This application has no explicit mapping for /error , so you are seeing this as a fallback‘ as shown below:

P.S Tested with Spring Boot and Thymeleaf 2.1.8.RELEASE version.

We can resolve the Whitelabel Error Page error in 3 ways:

1. Custom Error Controller

By implementing the ErrorController interface provided by the Spring Framework itself and overrides its getErrorPath() method to return a custom path to call when an error occurred:

In the customError() method, we return the custom message. If we trigger a 404, 500, etc error now, our custom message will be displayed.

2. Displaying Custom Error Page

Create a error.html page and put it into the src/main/resources/templates directory. Spring Boot’s BasicErrorController will automatically be picked it up by default.

Since we’re using Thymeleaf template engine to display the custom error page. Add the Thymeleaf dependency in the pom.xml:

3. Disabling the Whitelabel Error Page

By setting the server.error.whitelabel.enabled property to false in the application.properties file, we can disable the white label error page.

Note: Add the right property matched with Spring Boot version:

Spring Boot Version >= 1.3 then use server.error.whitelabel.enabled = false

Spring Boot Version error.whitelabel.enabled = false

We can achieve the same result by excluding the ErrorMvcAutoConfiguration class to the main class:

Источник

Spring Boot Whitelabel Error

last modified May 19, 2022

Spring Boot Whitelabel Error tutorial shows how to configuare and display error messages in a Spring Boot application.

is a popular Java application framework and is an evolution of Spring which helps create stand-alone, production-grade Spring based applications easily.

Advertisements WhiteLabel Error Page

WhiteLabel Error Page is a generic Spring Boot error page that is displayed when no custom error page is present.

A WhiteLabel Error can is disabled in the application.properties file by setting the server.error.whitelabel.enabled to false .

Another way of disabling the WhiteLabel Error is excluding the ErrorMvcAutoConfiguration .

Alternatively, the exclusion can be done in an annotation.

When the WhiteLabel Error Page is disabled and no custom error page is provided, the web server’s error page (Tomcat, Jetty) is shown.

Spring Boot Custom Error Page

Without using a Thymeleaf template engine, we can place a generic custom error page in a src/main/resources/public/errors directory.

This is a generic error page for 404 error.

A generic error page using a template can be placed in the src/main/resources/templates/ directory.

A specific error page using a template can be placed in the src/main/resources/templates/error/ directory.

Advertisements Spring Boot Custom Error Page example

In the following example we create a simple Spring Boot application with uses a custom error page for the 404 error.

This is the project structure of the Spring application.

This is the Gradle build file. We have the spring-boot-starter-web and spring-boot-starter-thymeleaf starters.

In the application.properties , we can turn off the WhiteLabel Error with on of these settings. If we provide a custom error page, it automatically takes precedence over the WhiteLabel Error.

We have a simple controller that returns a text message for a home page.

This is a custom template error page created with Thymeleaf.

This code sets up the Spring Boot application.

In this tutorial, we have covered the WhiteLabel Error and we showed how to create our custom error pages.

Источник

Весенняя загрузка: Настройка Страницы с ошибкой Белой Метки

Узнайте, как настроить страницу ошибок по умолчанию в приложении Spring Boot.

Автор: baeldung
Дата записи

1. Обзор

В этой статье мы рассмотрим, как отключить и настроить страницу ошибок по умолчанию для приложения Spring Boot , поскольку правильная обработка ошибок свидетельствует о профессионализме и качестве работы.

2. Отключение страницы с ошибкой белой метки

Во-первых, давайте посмотрим, как мы можем полностью отключить страницу ошибок с белой меткой, установив для свойства server.error.whitelabel.enabled значение false:

Добавление этой записи в файл application.properties отключит страницу с ошибкой и отобразит краткую страницу, созданную из базового контейнера приложения, например Tomcat.

Мы можем достичь того же результата, исключив ErrorMvcAutoConfiguration компонент. Мы можем сделать это, либо добавив эту запись в файл свойств:

Или добавив эту аннотацию в основной класс:

Все методы, упомянутые выше, отключат страницу ошибок с белой меткой. Это оставляет нас перед вопросом о том, кто же тогда на самом деле обрабатывает ошибку?

Ну, как упоминалось выше, обычно это базовый контейнер приложения. Хорошо то, что мы можем дополнительно настраивать вещи, показывая наши пользовательские страницы ошибок вместо всех значений по умолчанию – это основное внимание в следующем разделе.

3. Отображение Пользовательских Страниц Ошибок

Сначала нам нужно создать пользовательскую страницу ошибок HTML.

Мы сохраним файл как error.html так как мы используем Thymeleaf механизм шаблонов:

Если мы сохраним этот файл в каталоге ресурсы/шаблоны , он будет автоматически подхвачен контроллером BasicErrorController весенней загрузки по умолчанию .

Это все, что нам нужно для отображения нашей пользовательской страницы ошибок. С некоторой стилизацией у нас теперь будет гораздо более приятная страница ошибок для наших пользователей:

Мы можем быть более конкретными, назвав файл кодом состояния HTTP, который мы хотим использовать, например, сохранив файл как 404.html в ресурсы/шаблоны/ошибка означает, что он будет явно использоваться для 404 ошибок.

3.1. Пользовательский контроллер ошибок

Ограничение до сих пор заключается в том, что мы не можем запускать пользовательскую логику при возникновении ошибок. Чтобы достичь этого, мы должны создать компонент контроллера ошибок, который заменит компонент по умолчанию.

Для этого мы должны создать класс, реализующий Контроллер ошибок интерфейс , и переопределить его метод getErrorPath () , чтобы вернуть пользовательский путь для вызова при возникновении ошибки.

Однако, начиная с версии 2.3.x, Spring Boot устарел этот метод, и вместо этого для указания пользовательского пути следует использовать свойство server.error.path .

Но поскольку он все еще является частью интерфейса Контроллера ошибок и не был удален полностью, нам нужно будет переопределить его, иначе компилятор пожалуется. Чтобы обойти проблему здесь, мы возвращаем null , так как это в любом случае будет проигнорировано:

В приведенном выше фрагменте мы также аннотируем класс с помощью @Controller и создаем сопоставление для пути, указанного в качестве свойства server.error.path:

Таким образом, контроллер может обрабатывать вызовы по пути /ошибка .

В HandleError () мы возвращаем пользовательскую страницу ошибок , созданную ранее. Если мы сейчас вызовем ошибку 404, то будет отображена наша пользовательская страница.

Давайте еще больше укрепим Ошибка управления() для отображения определенных страниц ошибок для различных типов ошибок.

Например, у нас могут быть красиво оформленные страницы, специально предназначенные для 404 и 500 типов ошибок. Затем мы можем использовать код состояния HTTP ошибки, чтобы определить подходящую страницу ошибки для отображения:

Затем, например, для ошибки 404 мы увидим error-404.html страница:

4. Заключение

С помощью этой информации мы можем теперь более элегантно обрабатывать ошибки и показывать вашим пользователям эстетичную страницу.

Как всегда, полный исходный код доступен на Github .

Источник

Вот как я решил свою проблему. Вот мой подробный код, если кто хочет посмотреть.

Https://github.com/xbox2204/SpringBoot-JPA-Swagger

Теперь я использовал 3.0.0-SNAPSHOT и последний стартовый проект с весенней загрузкой, который я создал отсюда:

Https://start.spring.io/

  1. В свой pom.xml я добавил следующие зависимости:
    <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>3.0.0-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.plugin</groupId>
                    <artifactId>spring-plugin-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>3.0.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.plugin</groupId>
            <artifactId>spring-plugin-core</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>

  1. В моем application.properties я добавил следующее:
spring.resources.add-mappings=true
  1. В моем классе SpringBoot Main / Runner я добавил эти аннотации
@EnableWebMvc
@EnableSwagger2
@SpringBootApplication
  1. Моя функция возврата Docket выглядела так
@Bean
    public Docket productApi() {
        Contact contact =new Contact(
                "Vineet Mishra",
                "https://github.com/xbox2204",
                "whatwillyoudo@withmyemail.com"
        );
        ApiInfo apiInfo= new ApiInfoBuilder().title("VINEET SPRING-BOOT API")
                .description("Spring-Boot for all")
                .termsOfServiceUrl("jUST CHILL!!!")
                .contact(contact)
                .licenseUrl("something@something.com").version("1.0").build();

        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo)
                .select()
                .apis(RequestHandlerSelectors.any())
                .build();
    }
  1. Наконец, я получил доступ к своему swagger-ui из

Http: // localhost: 8080 / swagger-ui / index.html #

Изображение окончательного результата

I’m bad at English, that’s why GoogleTranslate.

That version and way of doing it is already a bit outdated, if you want the documentation to be generated automatically, SpringDoc simplifies the generation and maintenance of API documents, based on the OpenAPI 3 specification, for Spring Boot 1.x and 2.x. applications.

For magic to happen we simply add the dependency to our pom:



    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-ui</artifactId>
        <version>1.2.32</version>
    </dependency>

then access the description that already has it http://localhost:8080/v3/api-docs/

and for swagger: http://localhost:8080/swagger-ui.html

that’s all there is to it.

for more detail

if you want to customize the api information you can include java style annotations:



    @OpenAPIDefinition(
        info = @Info(
                 title = "API personas", 
                 description = "Este es un ejemplo de servidor Personas-Server."
            + "Usted puyede encontrar mas acerca de Swagger " ++"[http://swagger.io](http://swagger.io) o en "
            + "[irc.freenode.net, #swagger](http://swagger.io/irc/).",
            termsOfService = "http://swagger.io/terms/", 
              license = @License(
                          name = "Apache 2.0", 
                          url = "http://springdoc.org"), 
       version = "otra"
    ))
    @Tag(name = "persona", description = "API para personas")
    @RestController
    @RequestMapping("persona")
    public class PersonaRest extends GeneralRest {}

can also be generated for special methods:



     @Operation(
         summary = "traer todas las personas", 
         description = "api para traer todas las personas, aqui no se tienen en cuenta paginaciones, ni filtros, trae todos los registros", 
         tags = { "persona" }
         )
     @ApiResponses(
         value = {
         @ApiResponse(
             responseCode = "200", 
             description = "Operación exitosa", 
             content = @Content(
                 mediaType = "application/json", 
                 array = @ArraySchema(
                     schema = @Schema(
                         implementation = PersonaTO.class
                         )))),
         @ApiResponse(
             responseCode = "401", 
             description = "Sin autorización", 
             content = @Content(
                 mediaType = "application/json", 
                 schema = @Schema(
                     implementation = Object.class
                     ))),
     })
     @GetMapping
     public List personas() {
            return personaServicio.obtenerTodo();
        }

it is always good practice to use the most recent libraries and inclusions.

Я использовал Swagger 2.9.2 в своем приложении для весенней загрузки.

localhost:8080/api-docs отлично работает.

Однако localhost:8080/swagger-ui.html возвращает writelabel error.

localhost:8080/v2/swagger-ui.html и localhost:8080/api/swagger-ui.html возвращают ту же ошибку. Должно быть, я пропустил что-то простое. Спасибо.

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Wed Aug 22 10:05:48 CDT 2018
There was an unexpected error (type=Not Found, status=404).
No message available

В build.gradle у меня есть зависимость от springfox.

compile("io.springfox:springfox-swagger2:2.9.2")
compile("io.springfox:springfox-swagger-ui:2.9.2")

swaggerconfig.java 

@Configuration
@EnableSwagger2
public class SwaggerConfig{
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage(MyServiceController.class.getPackage().getName()))
                //.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                .paths(PathSelectors.ant("/api/**"))
                .build()
                .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        String description = "Company -  My API";
        return new ApiInfoBuilder()
                .title("REST API")
                .description(description)
                .version("1.0")
                .build();
    }

MyServiceController.java 

 @ApiOperation(value = "some description",
            response = MyServiceResponse.class)
    @ApiResponses(value = {
            @ApiResponse(code = 200, message = "ok"),
            @ApiResponse(code = 400, message = "Bad Request"),
            @ApiResponse(code = 401, message = "not authorized"),
            @ApiResponse(code = 403, message = "not authenticated"),
            @ApiResponse(code = 404, message = "The resource you were trying to reach is not found"),
            @ApiResponse(code=500, message = "Interval Server Error")
    })
    @RequestMapping(method = RequestMethod.POST, value = "/api/component/operation", consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
    @ResponseBody
    {
        do something        
    }

In our project we are using 3.0.0-SNAPSHOT of swagger springfox.

Recently when we open swagger-ui.html, it is giving 404 Whilte Label Error.

I enabled logs at web level

`

logging.level.web=TRACE
logging.level.org.springframework.web=TRACE

`

It is loading «/swagger-resources», but not loading «/swagger-ui.html»

The addition of the resource handler is as per the document.

When loading «/swagger-ui.html», it’s giving «Resource not found»

`

web.server.adapter.HttpWebHandlerAdapter.traceDebug - [74c4396b] HTTP GET "/swagger-resources/", headers={masked}
web.reactive.result.method.annotation.RequestMappingHandlerMapping.lambda$getHandler$1 - [74c4396b] Mapped to public org.springframework.http.ResponseEntity<java.util.List<springfox.documentation.swagger.web.SwaggerResource>> springfox.documentation.swagger.web.ApiResourceController.swaggerResources()
web.reactive.result.method.annotation.ResponseEntityResultHandler.selectMediaType - Using 'application/json;q=0.8' given [text/html, application/xhtml+xml, image/webp, image/apng, application/xml;q=0.9, application/signed-exchange;v=b3;q=0.9, */*;q=0.8] and supported [application/json]
web.reactive.result.method.annotation.ResponseEntityResultHandler.writeBody - [74c4396b] 0..1 [java.util.List<springfox.documentation.swagger.web.SwaggerResource>]
http.codec.json.Jackson2JsonEncoder.trace - [74c4396b] Encoding [[springfox.documentation.swagger.web.SwaggerResource@4903f26e, springfox.documentation.swagger.web.SwaggerResource@57b46085, springfox.documentation.swagger.web.SwaggerResource@4beb0f82, springfox.documentation.swagger.web.SwaggerResource@3a6db652, springfox.documentation.swagger.web.SwaggerResource@6caba3f3, springfox.documentation.swagger.web.SwaggerResource@18ef56ab, springfox.documentation.swagger.web.SwaggerResource@b6bcd2b, springfox.documentation.swagger.web.SwaggerResource@5ce32532, springfox.documentation.swagger.web.SwaggerResource@6d66b166, springfox.documentation.swagger.web.SwaggerResource@fdef86f, springfox.documentation.swagger.web.SwaggerResource@5a096e2a, springfox.documentation.swagger.web.SwaggerResource@1f060aec, springfox.documentation.swagger.web.SwaggerResource@473365eb, springfox.documentation.swagger.web.SwaggerResource@3fd6e0e2]]
web.server.adapter.HttpWebHandlerAdapter.traceDebug - [74c4396b] Completed 200 OK, headers={masked}
http.server.reactive.ReactorHttpHandlerAdapter.trace - [74c4396b] Handling completed

web.server.adapter.HttpWebHandlerAdapter.traceDebug - [74c4396b] HTTP GET "/swagger-ui.html", headers={masked}
web.reactive.handler.SimpleUrlHandlerMapping.lookupHandler - [74c4396b] Matching patterns [/swagger-ui.html**, /**]
web.reactive.handler.SimpleUrlHandlerMapping.lambda$getHandler$1 - [74c4396b] Mapped to ResourceWebHandler ["classpath:/META-INF/resources/"]
web.reactive.resource.ResourceWebHandler.lambda$handle$0 - [74c4396b] Resource not found
web.reactive.function.server.RouterFunctions.route - [74c4396b] Matched org.springframework.boot.autoconfigure.web.reactive.error.DefaultErrorWebExceptionHandler$$Lambda$1372/0x00000008008bb040@10209892
web.HttpLogging.debug - [74c4396b] Resolved [ResponseStatusException: 404 NOT_FOUND] for HTTP GET /swagger-ui.html
core.codec.CharSequenceEncoder.trace - [74c4396b] Writing "<html><body><h1>Whitelabel Error Page</h1><p>This application has no configured error view, so you are seeing this as a fallback.</p><div id='created'>Thu Jul 02 22:15:45 IST 2020</div><div>There was an unexpected error (type=Not Found, status=404).</div></body></html>"
web.server.adapter.HttpWebHandlerAdapter.traceDebug - [74c4396b] Completed 404 NOT_FOUND, headers={masked}
http.server.reactive.ReactorHttpHandlerAdapter.trace - [74c4396b] Handling completed

`

I checked if path inside META-INF is changed or not as per documentation at https://springfox.github.io/springfox/docs/snapshot/#snapshot-3, it is same as V 2.10.5

Then, when I changed version from V 3 Snapshot to current stable 2.10.5, it worked.

Can you let me know what I am missing? And since I am a noobie, can you tell me is snapshot version is like beta version which should not be used in production?

давай читать то, что написано вместе за ручку =)
«это приложение не имеет эксплицитного (явного) маппинга для /error, поэтому ты видишь это»
добавь какой-то любой маппинг напр
@RestController
public class MyController

@GetMapping(«/error»)
public String smth() return «Error world»;
>
>
пробегись по spring boot in action. сам не читал, но говорят годная, странич всего ничего

в пропертях добавь
server.error.whitelabel.enabled=false

ну или нарисуй свою страничку error.html
закинь в resources/templates

создай свой контроллер чтоб перехватить дефолтовое поведение

@Controller
public class MyErrorController implements ErrorController

@RequestMapping(«/error»)
public String handleError() //do something like logging
return «error»;
>

@Override
public String getErrorPath() return «/error»;
>
>

можешь под каждую свою ошибку свою error страничку сделать
типа error404.html error500.html

и переписать метод вот так

@RequestMapping(«/error»)
public String handleError(HttpServletRequest request) Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);

if (status != null) Integer statusCode = Integer.valueOf(status.toString());

if(statusCode == HttpStatus.NOT_FOUND.value()) return «error404»;
>
else if(statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) return «error500»;
>
>
return «error»;
>

тогда будет подгружать нужную тебе страничку ошибки.

но как ты уже понял. это всё лишь чтоб настроить что показывать.

почему именно у тебя ошибка происходит — это ты уж в своём аппе копайся.

В этом приложении нет явного сопоставления для / error

Я использовал maven для создания учебника https://spring.io/guides/gs/uploading-files/
Все используемые мной коды были скопированы.

Приложение может работать, но я получаю сообщение об ошибке:

Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Tue Jun 30 17:24:02 CST 2015 There was an unexpected error (type=Not Found, status=404). No message available

Как я могу это исправить?

Убедитесь, что ваш основной класс находится в корневом пакете над другими классами.

Когда вы запускаете приложение Spring Boot (т. Е. Класс, помеченный @SpringBootApplication), Spring будет сканировать только классы, расположенные ниже вашего основного пакета классов.

Когда мы создаем загрузочное приложение Spring, мы аннотируем его @SpringBootApplication аннотациями. Эта аннотация «завершает» многие другие аннотации, необходимые для работы приложения. Одна из таких аннотаций — @ComponentScan аннотация. Эта аннотация сообщает Spring искать компоненты Spring и настраивать приложение для запуска.

Класс вашего приложения должен быть на вершине иерархии пакетов, чтобы Spring мог сканировать подпакеты и находить другие необходимые компоненты.

Ниже фрагмент кода работает, поскольку пакет контроллера находится в com.test.spring.boot пакете

Ниже фрагмент кода НЕ работает, поскольку пакет контроллера НЕ находится в com.test.spring.boot пакете

Из документации Spring Boot:

Many Spring Boot developers always have their main class annotated with @Configuration , @EnableAutoConfiguration and @ComponentScan . Since these annotations are so frequently used together (especially if you follow the best practices above), Spring Boot provides a convenient @SpringBootApplication alternative.

The @SpringBootApplication annotation is equivalent to using @Configuration , @EnableAutoConfiguration and @ComponentScan with their default attributes

Вы можете решить эту проблему, добавив ErrorController в свое приложение. Вы можете заставить контроллер ошибок возвращать нужное вам представление.

Контроллер ошибок в моем приложении выглядит так:

Вышеупомянутый класс основан на классе Springs BasicErrorController .

Вы можете создать экземпляр вышеуказанного ErrorController в @Configuration файле следующим образом:

Вы можете переопределить значение ErrorAttributes по умолчанию , реализовав ErrorAttributes . Но в большинстве случаев атрибутов DefaultErrorAttributes должно быть достаточно.

В моем случае класс контроллера был аннотирован @Controller . Изменив это, чтобы @RestController решить проблему. В основном @RestController это @Controller + @ResponseBody так либо использовать @RestController , либо @Controller с @ResponseBody аннотацией к каждому методу.

в моем случае это из-за позиции пакета, то есть пакет контроллера должен быть выше пакета основного класса

если мой пакет основного класса — это package co.companyname.spring.tutorial; любой пакет контроллера, package co.companyname.spring.tutorial.WHAT_EVER_HERE;

после завершения кодирования нажмите кнопку загрузки приборной панели

введите описание изображения здесь

последнее, что нужно, чтобы убедиться, что ваш контроллер отображает или не только консоль, вы должны увидеть что-то smilliar

Это происходит, когда явная страница ошибки не определена. Чтобы определить страницу ошибки, создайте сопоставление / error с представлением. например, приведенный ниже код сопоставляется со строковым значением, возвращаемым в случае ошибки.

Попробуйте добавить зависимость.

По умолчанию весенняя загрузка будет сканировать текущий пакет на предмет определения bean-компонента. Поэтому, если ваш текущий пакет, в котором определен основной класс, а пакет контроллера не совпадает, или пакет контроллера не является дочерним пакетом вашего основного пакета приложения, он не будет сканировать контроллер. Чтобы решить эту проблему, можно включить список пакетов для определения bean-компонента в основной пакет.

или создать иерархию пакетов, в которой дочерний пакет является производным от основного пакета

Я разрабатываю приложение Spring Boot в течение нескольких недель .. И я получил ту же ошибку, что и ниже;

Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Thu Jan 18 14:12:11 AST 2018 There was an unexpected error (type=Not Found, status=404). No message available

Когда я получаю это сообщение об ошибке, я понял, что мой контроллер или класс контроллера отдыха не определен в моем проекте. Я имею в виду, что все наши пакеты контроллеров не являются одним и тем же пакетом с основным классом, который включает аннотацию @SpringBootApplication .. Я имею в виду, что вам нужно добавить имя вашего пакета контроллера в аннотацию @ComponentScan к вашему основному классу, который включает аннотацию @SpringBootApplication. Если вы напишете приведенные ниже коды, ваша проблема будет решена . Самое главное, вы должны добавить весь пакет вашего контроллера в аннотацию @ComponentScan, как я сделал в приведенном ниже

Я надеюсь, что эти коды помогут кому-то .

Если вы найдете другой способ решить эту ошибку или у вас есть предложения для меня, напишите в комментарии . спасибо .

Проблемы с простым проектом с Spring Framework

Пытаюсь написать приложение по https://www.toptal.com/spring/beginners-guide-to-mvc-with-spring-framework Запускается успешно, но на localhost пишет:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Как исправить ее в данном проекте?

В HTML в строке по типу

выделяется как ошибка. Почему?

При работе Spring Boot + Freemarker если появляется страница:

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

В версии spring-boot-starter-parent 2.2.1.RELEASE не работает freemarker :

    переименуйте файлы Freemarker c .ftl на .ftlh

Добавьте в application.properties :

spring.freemarker.expose-request-attributes=true
spring.freemarker.suffix= .ftl

Проблема #1: на / ничего не замаплено, поэтому при открытии сайта вы видите подобную ошибку.

Проблема #2: если обратиться по адресу /students , то появляется еще одна ошибка, но уже другая: Exception evaluating SpringEL expression: «student.forename + ‘ ‘ + student.surame» (students:16) . Если очень внимательно посмотреть, то уже ясно в чем дело, но на всякий случай можно посмотреть в консоль на исключение: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 33): Property or field ‘surame’ cannot be found on object of type ‘wenti.entity.Student’ — maybe not public? Причина в банальной опечатке — вы обращаетесь к полю surame , вместо surname .

В ошибке написано, что неверный мапинг по адресу /error . Spring перенаправляет вас на страницу /error когда по вашему GET запросу произошла ошибка на сервере.

Какие есть варианты 1. Ошибка при получении/обработке данных на сервере (как пример NullPointerException ). Пройтись дебагом по коду, посмотреть не выпадает ли где exception. 2. Ошибка при парсинге страницы thymeleaf.

Посмотрите лог, скорее всего ваша ошибка выше, чем то, что вы указали в отрывке.

user avatar

В дополнение к ответу о том, что:

При работе Spring Boot + Freemarker если появляется страница:

Whitelabel Error Page
This application has no explicit mapping for error, so you are seeing this as a fallback.

У меня версия spring-boot-starter-parent 2.5.3 чтобы работал freemarker сделал следующее:

Понравилась статья? Поделить с друзьями:
  • Whitelabel error page spring boot ошибка
  • Whitelabel error page 401
  • White label error page на госуслугах ошибка 405
  • White check bar error урискан про ошибка
  • Whirlpool ошибка f21