{"id":1450,"date":"2020-11-09T22:02:24","date_gmt":"2020-11-09T13:02:24","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=1450"},"modified":"2021-12-05T03:24:57","modified_gmt":"2021-12-04T18:24:57","slug":"swagger-ui-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=1450","title":{"rendered":"Swagger UI 2 \uc124\uc815\ud558\uae30"},"content":{"rendered":"<h1>Swagger UI 2 \uc124\uc815\ud558\uae30<\/h1>\n<h2>\uc758\uc874\uc131 \ucd94\uac00<\/h2>\n<pre><code class=\"language-gradle\">dependencies {\n    implementation &#039;io.springfox:springfox-swagger-ui:2.9.2&#039;\n    implementation &#039;io.springfox:springfox-swagger2:2.9.2&#039;\n}<\/code><\/pre>\n<h2>Swagger \ud65c\uc131\ud654<\/h2>\n<pre><code class=\"language-java\">@Configuration\n@EnableSwagger2\npublic class SwaggerConfig {\n\n    @Bean\n    public Docket api() {\n        return new Docket(DocumentationType.SWAGGER_2)\n                .select()\n                .apis(RequestHandlerSelectors.any())\n                .paths(PathSelectors.ant(&quot;\/api\/**&quot;))\n                .build();\n    }\n}<\/code><\/pre>\n<p>\ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c <a href=\"http:\/\/localhost:8080\/swagger-ui.html\">http:\/\/localhost:8080\/swagger-ui.html<\/a> \ub97c \uc811\uc18d\ud558\uba74 Swagger UI \uac00 \uc2e4\ud589\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>\ucee8\ud2b8\ub864\ub7ec\uc5d0 annotation \ucd94\uac00<\/h2>\n<p><code>ApiOperation<\/code> annotation \uc744 \ucd94\uac00\ud558\uba74 \ud55c\uae00 \uc124\uba85\uc744 \uba54\uc18c\ub4dc\uc5d0 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><code>ApiImplicitParams<\/code> \uc744 \uc774\uc6a9\ud574 \ud30c\ub77c\ubbf8\ud130\uc5d0 \ub300\ud55c \ud55c\uae00 \uc124\uba85\uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-java\">@RequiredArgsConstructor\n@RestController\npublic class MenusApiController {\n\n    private final MenusService menusService;\n\n    @ApiOperation(value = &quot;\uba54\ub274 \uc800\uc7a5&quot;, notes = &quot;\uba54\ub274 \uc544\uc774\ud15c\uc744 \uc2e0\uaddc\ub4f1\ub85d\ud569\ub2c8\ub2e4.&quot;)\n    @PostMapping(&quot;\/v1\/settings\/menu&quot;)\n    public ResponseWithDataDto save(@RequestBody MenusSaveRequestDto menusSaveRequestDto) {\n        return menusService.save(menusSaveRequestDto);\n    }\n\n    @ApiOperation(value = &quot;\uba54\ub274 \uc870\ud68c&quot;, notes = &quot;\uba54\ub274 \uc544\uc774\ud15c\uc744 \uc870\ud68c\ud569\ub2c8\ub2e4.&quot;)\n    @ApiImplicitParams({\n            @ApiImplicitParam(name = &quot;id&quot;, value = &quot;\uba54\ub274 ID&quot;, required = true, dataType = &quot;int&quot;, paramType = &quot;path&quot;, defaultValue = &quot;&quot;),\n    })\n    @GetMapping(&quot;\/v1\/settings\/menu\/{id}&quot;)\n    public ResponseDto findById(@PathVariable Integer id) {\n        return menusService.findById(id);\n    }\n}<\/code><\/pre>\n<h2>\ud5e4\ub354 \ucd94\uac00<\/h2>\n<p><code>List&lt;Parameter&gt;<\/code> \ub97c \uc774\uc6a9\ud574 \ud5e4\ub354\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-java\">@Configuration\n@EnableSwagger2\npublic class SwaggerConfig {\n\n    @Bean\n    public Docket api() {\n\n        ParameterBuilder parameterBuilder = new ParameterBuilder();\n        List&lt;Parameter&gt; parameters = new ArrayList&lt;&gt;();\n\n        parameterBuilder\n                .name(&quot;X-Authorization&quot;)\n                .modelRef(new ModelRef(&quot;string&quot;))\n                .parameterType(&quot;header&quot;)\n                .required(false)\n                .build();\n        parameters.add(parameterBuilder.build());\n\n        return new Docket(DocumentationType.SWAGGER_2)\n                .globalOperationParameters(parameters)\n                .select()\n                .apis(RequestHandlerSelectors.any())\n                .paths(PathSelectors.ant(&quot;\/v1\/**&quot;))\n                .build();\n    }\n}<\/code><\/pre>\n<h2>Spring Security<\/h2>\n<p>Spring Security \uac00 \ud65c\uc131\ud654 \ub418\uc5b4 \uc788\ub294 \uacbd\uc6b0, <code>&quot;\/swagger-ui.html&quot;<\/code>, <code>&quot;\/webjars\/**&quot;<\/code>, <code>&quot;\/swagger-resources\/**&quot;<\/code>, <code>&quot;\/v2\/api-docs\/**&quot;<\/code> \ub97c \ud5c8\uc6a9\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-java\">@EnableWebSecurity\npublic class WebSecurityConfig extends WebSecurityConfigurerAdapter {\n\n    \/\/ ......\n\n    @Override\n    protected void configure(HttpSecurity http) throws Exception {\n\n        http\n                .addFilterBefore(corsFilter(), SessionManagementFilter.class)\n                .addFilterBefore(rsaHeaderKeyFilter(), BasicAuthenticationFilter.class)\n                .authorizeRequests().antMatchers(&quot;\/health\/**&quot;,\n                        &quot;\/v1\/user\/**&quot;,\n                        &quot;\/swagger-ui.html&quot;,\n                        &quot;\/webjars\/**&quot;,\n                        &quot;\/swagger-resources\/**&quot;,\n                        &quot;\/v2\/api-docs\/**&quot;).permitAll()\n                .anyRequest().authenticated()\n                .and()\n                .csrf().disable();\n    }\n\n    \/\/ ......\n}<\/code><\/pre>\n<h2>DTO \uc5d0 \uc608\uc81c\uac12 \ud45c\uc2dc<\/h2>\n<pre><code class=\"language-java\">@Getter\n@NoArgsConstructor\npublic class MenusSaveRequestDto implements Serializable {\n\n    @ApiModelProperty(example = &quot;0&quot;)\n    private Integer pidx;\n    @ApiModelProperty(example = &quot;\ud14c\uc2a4\ud2b8 \uba54\ub274&quot;)\n    private String menuName;\n    @ApiModelProperty(example = &quot;Y&quot;)\n    private String useyn;\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Swagger UI 2 \uc124\uc815\ud558\uae30 \uc758\uc874\uc131 \ucd94\uac00 dependencies { implementation &#039;io.springfox:springfox-swagger-ui:2.9.2&#039; implementation &#039;io.springfox:springfox-swagger2:2.9.2&#039; } Swagger \ud65c\uc131\ud654 @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.ant(&quot;\/api\/**&quot;)) .build(); } } \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c http:\/\/localhost:8080\/swagger-ui.html \ub97c \uc811\uc18d\ud558\uba74 Swagger UI \uac00 \uc2e4\ud589\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucee8\ud2b8\ub864\ub7ec\uc5d0 annotation \ucd94\uac00 ApiOperation annotation \uc744 \ucd94\uac00\ud558\uba74 \ud55c\uae00\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=1450\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-1450","post","type-post","status-publish","format-standard","hentry","category-java"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1450","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1450"}],"version-history":[{"count":22,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1450\/revisions"}],"predecessor-version":[{"id":4070,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1450\/revisions\/4070"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1450"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}