사용자 도구

사이트 도구


springframework:springfox

SpringFox

The Springfox suite of java libraries are all about automating the generation of machine and human readable specifications for JSON APIs written using the spring family of projects.

Spring MVC and swagger

  • Spring MVC Swagger 튜토리얼 시리즈
  • Spring MVC API 적용 Servlet의 “/“가 아닌 ”/api/*” 형태로 매핑되면 Swagger 적용이 복잡해진다. 최근 버전은 매우 간결해짐.
    // /css/*, /js/* 등에 대한 핸들러 추가.
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
      registry.addResourceHandler("css/**", "js/**", "lib/**", "images/**", "swagger-ui.js")
        .addResourceLocations(WEB_JAR_RESOURCE_LOCATION,
            WEB_JAR_RESOURCE_LOCATION + "css/",
            WEB_JAR_RESOURCE_LOCATION + "js/",
            WEB_JAR_RESOURCE_LOCATION + "lib/",
            WEB_JAR_RESOURCE_LOCATION + "images/")
        .setCachePeriod(0);
      super.addResourceHandlers(registry);
    }
     
    @ApiIgnore
    @Controller
    public class SwaggerController {
      @Autowired
        private ResourceLoader resourceLoader;
     
      @RequestMapping("/swagger")
        public void swagger(HttpServletResponse response) throws IOException {
          final Resource swaggerHtmlResource =
            resourceLoader.getResource("classpath:/META-INF/resources/sdoc.jsp");
     
          final String swaggerHtmlContents =
            CoupangIOUtils.toString(swaggerHtmlResource.getInputStream(), "UTF-8");
          final String refinedHtml = swaggerHtmlContents
            .replaceAll("http://swagger.wordnik.com", "/api/swagger");
     
          response.setContentType("text/html; charset=UTF-8");
          final PrintWriter writer = response.getWriter();
          writer.write(refinedHtml);
          writer.close();
        }
    }

숫자값 parsing 에러

  • 파라미터 타입이 primitive 숫자(int, long 등)인데, example을 지정하지 않으면 empty string이 example로 들어오게 되고, 그로인해 Swagger UI 출력시 숫자값 파싱 오류가 발생한다. 이때 example을 적합한 숫자로 넣어주면 된다.
  • 원칙적으로 Boxed Type에 대해서는 발생하지 않을거 같고 일부 괜찮은데 일부는 또 파싱 오류가 발생하기도 한다.(example값에 empty string을 넣어서)
@ApiParam(value = "userId", defaultValue="1", example = "1") int userId;

참조

springframework/springfox.txt · 마지막으로 수정됨: 2020/08/26 10:32 저자 kwon37xi