복붙노트

[SPRING] Spring Boot로 Swagger를 구성하는 동안 예기치 않은 결과 얻기

SPRING

Spring Boot로 Swagger를 구성하는 동안 예기치 않은 결과 얻기

저는 Swagger를 처음 접했고 Spring Boot를 사용하여 작성한 웹 서비스를 매우 간단하게 문서화하기 시작했습니다.

문제는 swagger를 구성한 후 localhost : 8080 / swagger-ui.html을 입력하면 브라우저에서 "기본 URL을 유추 할 수 없습니다"라는 이상한 팝업 메시지와 함께 다음 화면이 표시됩니다. 이는 동적 서블릿을 사용할 때 일반적입니다. 등록 또는 API가 API 게이트웨이 뒤에있는 경우 " 나는 그것이 반복되는 질문으로 보일지 모른다는 것을 알고 있지만, 주어진 모든 대답으로 이것을 해결할 수는 없습니다. 다음으로, 스크린 샷과 코드를 게시했는데 내가 잘못한 부분이 없습니다. 내가 잘못되면 이해해주세요.

스크린 샷 :

암호 SwaggerConfig.java

package com.test.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import static springfox.documentation.builders.PathSelectors.regex;

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket productApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .paths(regex("/greet.*"))
                .build();
    }
}

TestApplication.java

package com.test.config;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages="com.test.controllers") 
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
}

TestController.java

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/greet")
public class TestController {

    @RequestMapping
        public String getGreeting() {
        return "Hello There";
    }
}

위 코드에서 SwaggerConfig.java와 TestApplication.java는 모두 같은 패키지에 속합니다. 즉 com.test.config와 TestController.java는 com.test.controllers에 속합니다

이것은 내가 가진 모든 코드이며 pom.xml에는 다음 두 가지 종속성이 있습니다.

<dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.6.1</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.6.1</version>
        <scope>compile</scope>
    </dependency>

해결법

  1. ==============================

    1.Application 클래스에 주석 @ EnableSwagger2를 추가하여 해결했습니다.

    Application 클래스에 주석 @ EnableSwagger2를 추가하여 해결했습니다.

    @SpringBootApplication
    @EnableSwagger2 //this
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
    }
    
  2. ==============================

    2.스프링 부트 응용 프로그램을 전쟁 유물로 배포 할 때도 같은 문제에 직면했습니다. 내장 된 tomcat (독립형 스프링 부트 응용 프로그램)으로 응용 프로그램을 실행하는 동안 war 파일을 원격 Tomcat에 위의 문제에 직면하는 것처럼 제대로 작동했습니다.

    스프링 부트 응용 프로그램을 전쟁 유물로 배포 할 때도 같은 문제에 직면했습니다. 내장 된 tomcat (독립형 스프링 부트 응용 프로그램)으로 응용 프로그램을 실행하는 동안 war 파일을 원격 Tomcat에 위의 문제에 직면하는 것처럼 제대로 작동했습니다.

    약간의 발굴에서 전쟁 아카이브 응용 프로그램에 대한 서블릿 초기화 프로그램이 누락되었음을 발견했습니다.

    다음은 나를 위해 매력처럼 일했습니다.

    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.support.SpringBootServletInitializer;
    
    public class ServletInitializer extends SpringBootServletInitializer {
    
       @Override
       protected SpringApplicationBuilder configure(SpringApplicationBuilder application){ 
       return application.sources(TestApplication.class); 
       }
    }
    
  3. ==============================

    3.흠, .paths를 .apis (RequestHandlerSelectors.basePackage ( "컨트롤러가 com.demo.example.controller"인 패키지))로 변경해보십시오. 이 사진을 찍어도 작동하지 않으면 알려주십시오.

    흠, .paths를 .apis (RequestHandlerSelectors.basePackage ( "컨트롤러가 com.demo.example.controller"인 패키지))로 변경해보십시오. 이 사진을 찍어도 작동하지 않으면 알려주십시오.

  4. ==============================

    4.Swagger가 인증 뒤에있는 경우 Spring Boot Security에서 다음을 수행해야합니다.

    Swagger가 인증 뒤에있는 경우 Spring Boot Security에서 다음을 수행해야합니다.

    http.authorizeRequests().antMatchers("/swagger-resources/**").permitAll().anyRequest().fullyAuthenticated();
    

    그런 다음 Swagger UI 문서에 액세스하십시오.

  5. ==============================

    5.제 경우에는이 빈 구성이 문제를 일으키는 사람이었습니다.

    제 경우에는이 빈 구성이 문제를 일으키는 사람이었습니다.

    @Bean
    public CsvMapper csvSerializerMapper() {
        stuff()
    }
    

    Spring은 이것을 사용하여 jackson objectMapper를 스프링에 초기화했습니다. 객체 매퍼로 bean을 추가하여 수정했습니다.

    @Autowired
    public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
        return builder.createXmlMapper(false).build();
    }
    
  6. from https://stackoverflow.com/questions/46520149/getting-an-unexpected-result-while-configuring-swagger-with-spring-boot by cc-by-sa and MIT license