{"id":455,"date":"2023-02-13T22:57:01","date_gmt":"2023-02-13T13:57:01","guid":{"rendered":"https:\/\/hirabay.net\/?p=455"},"modified":"2023-02-14T10:24:59","modified_gmt":"2023-02-14T01:24:59","slug":"%e3%80%90%e9%80%86%e5%bc%95%e3%81%8d%e8%a7%a3%e8%aa%ac%e3%80%91springdoc%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9","status":"publish","type":"post","link":"https:\/\/hirabay.net\/?p=455","title":{"rendered":"\u3010\u9006\u5f15\u304d\u89e3\u8aac\u3011SpringDoc\u306e\u4f7f\u3044\u65b9"},"content":{"rendered":"\n<p>API\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306fswagger\u304c\u30e1\u30b8\u30e3\u30fc\u304b\u3068\u601d\u3044\u307e\u3059\u304c\u3001\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u5b9f\u88c5\u3068\u3092\u30c0\u30d6\u30eb\u30e1\u30f3\u30c6\u3057\u3066\u3044\u304f\u306e\u3063\u3066\u306a\u304b\u306a\u304b\u96e3\u3057\u3044\u3067\u3059\u3088\u306d\u3002\u3002\u3002<\/p>\n\n\n\n<p>\u305d\u3093\u306a\u8ab2\u984c\u3092\u89e3\u6c7a\u3057\u3066\u304f\u308c\u308b\u306e\u304cSpringDoc\u3067\u3001<strong><span class=\"keiko_yellow\">Contoller\u306e\u30b3\u30fc\u30c9\u304b\u3089swagger\u306e\u5b9a\u7fa9\u3092\u81ea\u52d5\u751f\u6210\u3057\u3066\u304f\u308c\u308b<\/span><\/strong>\u3093\u3067\u3059\uff01\uff01<\/p>\n\n\n\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u305d\u3093\u306aspringdoc\u306e\u4f7f\u3044\u65b9\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u25bc\u4f3c\u305f\u6a5f\u80fd\u3092\u3082\u3064springfox\u306b\u3064\u3044\u3066\u306f\u3053\u3061\u3089\uff08springfox\u306f\u6700\u8fd1\u30e1\u30f3\u30c6\u3055\u308c\u3066\u306a\u3055\u305d\u3046\u3067\u3059\u3002\u3002\u3002\uff09<\/p>\n\n\n<a class=\"linkto table\" href=\"https:\/\/hirabay.net\/?p=244\"><span class=\"tbcell tbimg\"><img loading=\"lazy\" decoding=\"async\" width=\"160\" height=\"160\" src=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/01\/SpringBoot_springfox-160x160.png\" class=\"attachment-thumb-160 size-thumb-160 wp-post-image\" alt=\"\" srcset=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/01\/SpringBoot_springfox-160x160.png 160w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/01\/SpringBoot_springfox-150x150.png 150w\" sizes=\"auto, (max-width: 160px) 100vw, 160px\"><\/span><span class=\"tbcell tbtext\"><time class=\"pubdate sng-link-time dfont\" itemprop=\"datePublished\" datetime=\"2023-01-26\">2023\u5e741\u670826\u65e5<\/time>\u3010springfox\u3011Controller\u304b\u3089swagger\u3092\u81ea\u52d5\u751f\u6210<\/span><\/a>\n\n\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/c4179872\/public_html\/hirabay.net\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>110<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/c4179872\/public_html\/hirabay.net\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>115<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/c4179872\/public_html\/hirabay.net\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>122<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">\n  <li class=\"first\">\n    <a href=\"#i-0\">\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9<\/a>\n  <\/li>\n  <li>\n    <a href=\"#i-1\">\u5c0e\u5165<\/a>\n  <\/li>\n  <li class=\"last\">\n    <a href=\"#i-2\">\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/a>\n    <ul class=\"menu_level_1\">\n      <li class=\"first\">\n        <a href=\"#i-3\">\u30bf\u30a4\u30c8\u30eb<\/a>\n      <\/li>\n      <li>\n        <a href=\"#i-4\">Servers<\/a>\n      <\/li>\n      <li>\n        <a href=\"#i-5\">\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u8aac\u660e<\/a>\n      <\/li>\n      <li>\n        <a href=\"#i-6\">\u30bf\u30b0<\/a>\n      <\/li>\n      <li>\n        <a href=\"#i-7\">\u30e2\u30c7\u30eb\u306b\u8aac\u660e\u3084\u30b5\u30f3\u30d7\u30eb\u306e\u5024\u3092\u8ffd\u52a0\u3059\u308b<\/a>\n      <\/li>\n      <li>\n        <a href=\"#i-8\">\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u8aac\u660e\u3084\u30b5\u30f3\u30d7\u30eb\u306e\u5024\u3092\u8ffd\u52a0\u3059\u308b<\/a>\n      <\/li>\n      <li class=\"last\">\n        <a href=\"#i-9\">\u5171\u901a\u306e\u30a8\u30e9\u30fc\u30ec\u30b9\u30dd\u30f3\u30b9<\/a>\n      <\/li>\n    <\/ul>\n  <\/li>\n<\/ul>\n\n      \n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9<\/h2>\n\n\n\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u4ee5\u4e0b\u306eController\u3092\u5bfe\u8c61\u306b\u89e3\u8aac\u3092\u9032\u3081\u3066\u3044\u304d\u307e\u3059\uff01<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-file=\"SampleController.java\" data-lang=\"Java\"><code>@RestController\n@Validated\npublic class SampleController {\n\n    @PostMapping(value = \"\/sample\",\n            consumes = MediaType.APPLICATION_JSON_VALUE,\n            produces = MediaType.APPLICATION_JSON_VALUE\n    )\n    public void register(@RequestBody @Valid User request) {\n        return;\n    }\n\n    @GetMapping(value = \"\/sample\", produces = MediaType.APPLICATION_JSON_VALUE)\n    public User get(@Pattern(regexp = \"[0-9a-f-]{36}\") String id) {\n        return new User(\"1234567890\", \"hogehoge\", 30);\n    }\n\n    @Value\n    public static class User {\n        @NotNull\n        @Pattern(regexp = \"[0-9a-f-]{36}\")\n        private String id;\n        @NotNull\n        private String name;\n        @NotNull\n        @Min(1L)\n        @Max(100L)\n        private int age;\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-1\">\u5c0e\u5165<\/h2>\n\n\n\n<p>\u307e\u305a\u306fspringdoc\u306e\u5c0e\u5165\u304b\u3089\u3067\u3059\u3002<\/p>\n\n\n\n<p>spring-web\uff08WebMVC\uff09\u306e\u5834\u5408\u306f<code>springdoc-openapi-starter-webmvc-ui<\/code>\u3092\u8ffd\u52a0\u3059\u308b\u3060\u3051\u3067\u3059\uff01<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-groovy\" data-file=\"build.gradle\" data-lang=\"Groovy\"><code>plugins {\n\tid 'java'\n\tid 'org.springframework.boot' version '3.0.2'\n\tid 'io.spring.dependency-management' version '1.1.0'\n}\n\nrepositories {\n\tmavenCentral()\n}\n\ndependencies {\n\timplementation 'org.springframework.boot:spring-boot-starter-web'\n\timplementation 'org.springframework.boot:spring-boot-starter-validation'\n\ttestImplementation 'org.springframework.boot:spring-boot-starter-test'\n\n\tcompileOnly 'org.projectlombok:lombok'\n\tannotationProcessor 'org.projectlombok:lombok'\n\n\t\/\/ springdoc\u306e\u4f9d\u5b58\u3092\u8ffd\u52a0\u3059\u308b\n\timplementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'\n}<\/code><\/pre><\/div>\n\n\n<p><\/p><div class=\"memo \"><div class=\"memo_ttl dfont\"> \u30e1\u30e2<\/div>\u30fbspringboot2\u7cfb\u3067\u306f\u4f9d\u5b58\u30e9\u30a4\u30d6\u30e9\u30ea\u3084\u4f7f\u7528\u30af\u30e9\u30b9\u304c\u5909\u308f\u308a\u307e\u3059<br>\n\u3000\u2192 2\u7cfb\u306f\u3042\u3068\uff11\u5e74\u3082\u3057\u306a\u3044\u3046\u3061\u306bEOL\u306b\u306a\u308b\u305f\u30813\u7cfb\u3067\u306e\u7d39\u4ecb\u3068\u306a\u308a\u307e\u3059\ud83d\ude47\u200d\u2642\ufe0f<br>\n\u30fbWebFlux\u306e\u5834\u5408\u306f<code>springdoc-openapi-starter-webflux-ui<\/code>\u3092\u4f7f\u3048\u3070\u826f\u3044\u3067\u3059\uff01<\/div>\n\n\n\n<p>\u3053\u306e\u72b6\u614b\u3067\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8d77\u52d5\u3057\u3001<a href=\"http:\/\/localhost:8080\/webjars\/swagger-ui\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/localhost:8080\/webjars\/swagger-ui\/index.html<\/a> \u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068Swagger UI\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff01<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/dffe75ea10007b769560d57c4312ee46-1024x452.png\" alt=\"\" class=\"wp-image-459\" width=\"649\" height=\"286\" srcset=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/dffe75ea10007b769560d57c4312ee46-1024x452.png 1024w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/dffe75ea10007b769560d57c4312ee46-300x132.png 300w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/dffe75ea10007b769560d57c4312ee46-768x339.png 768w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/dffe75ea10007b769560d57c4312ee46-1536x678.png 1536w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/dffe75ea10007b769560d57c4312ee46-2048x903.png 2048w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/dffe75ea10007b769560d57c4312ee46-940x415.png 940w\" sizes=\"auto, (max-width: 649px) 100vw, 649px\"><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/c913bf09796c33107db2b0f0d9a67d42-1024x537.png\" alt=\"\" class=\"wp-image-460\" width=\"650\" height=\"340\" srcset=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/c913bf09796c33107db2b0f0d9a67d42-1024x537.png 1024w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/c913bf09796c33107db2b0f0d9a67d42-300x157.png 300w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/c913bf09796c33107db2b0f0d9a67d42-768x403.png 768w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/c913bf09796c33107db2b0f0d9a67d42-1536x805.png 1536w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/c913bf09796c33107db2b0f0d9a67d42-2048x1074.png 2048w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/c913bf09796c33107db2b0f0d9a67d42-940x493.png 940w\" sizes=\"auto, (max-width: 650px) 100vw, 650px\"><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/d3071c904a4ffb9b33a3071bb0ffa0f3-1024x453.png\" alt=\"\" class=\"wp-image-461\" width=\"649\" height=\"287\" srcset=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/d3071c904a4ffb9b33a3071bb0ffa0f3-1024x453.png 1024w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/d3071c904a4ffb9b33a3071bb0ffa0f3-300x133.png 300w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/d3071c904a4ffb9b33a3071bb0ffa0f3-768x340.png 768w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/d3071c904a4ffb9b33a3071bb0ffa0f3-1536x680.png 1536w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/d3071c904a4ffb9b33a3071bb0ffa0f3-2048x907.png 2048w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/d3071c904a4ffb9b33a3071bb0ffa0f3-940x416.png 940w\" sizes=\"auto, (max-width: 649px) 100vw, 649px\"><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/b881b1b132e7fdd2ddb41499a0fa88c7.png\" alt=\"\" class=\"wp-image-462\" width=\"490\" height=\"299\" srcset=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/b881b1b132e7fdd2ddb41499a0fa88c7.png 728w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/b881b1b132e7fdd2ddb41499a0fa88c7-300x183.png 300w\" sizes=\"auto, (max-width: 490px) 100vw, 490px\"><\/figure>\n\n\n\n<p>\u30e9\u30a4\u30d6\u30e9\u30ea\u5165\u308c\u305f\u3060\u3051\u306a\u306e\u306b\u3044\u3044\u611f\u3058\uff01\uff01\uff01<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-2\">\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/h2>\n\n\n\n<p>\u3053\u3053\u304b\u3089\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u8868\u793a\u304b\u3089\u306e\u5909\u66f4\u65b9\u6cd5\u3092\u9006\u5f15\u304d\u3067\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\uff01<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">\u30bf\u30a4\u30c8\u30eb<\/h3>\n\n\n\n<p>\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u300cOpenAPI definition\u300d\u3068\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u90e8\u5206\u3067\u3059\u3002<\/p>\n\n\n\n<p><code>@OpenAPIDefinition<\/code>\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u53ef\u80fd\u3067\u3059\uff01<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>@Configuration\n@OpenAPIDefinition(\n        info = @Info(title = \"Sample API\", description = \"\u89e3\u8aac\u7528\u306e\u30b5\u30f3\u30d7\u30ebAPI\u3067\u3059\u3002\")\n)\npublic class SwaggerAutoConfiguration {\n    \/\/ \u30af\u30e9\u30b9\u306e\u4e2d\u8eab\u306f\u7a7a\u3067\u3082OK\n}<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/b60a1c054b17667e4f5dfbe0783302a8.png\" alt=\"\" class=\"wp-image-465\" width=\"276\" height=\"146\" srcset=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/b60a1c054b17667e4f5dfbe0783302a8.png 552w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/b60a1c054b17667e4f5dfbe0783302a8-300x159.png 300w\" sizes=\"auto, (max-width: 276px) 100vw, 276px\"><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">Servers<\/h3>\n\n\n\n<p>Servers\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u30a2\u30af\u30bb\u30b9\u60c5\u5831\u3092\u5229\u7528\u3057\u3066\u57cb\u3081\u8fbc\u307e\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4eca\u306flocalhost\u3067\u8d77\u52d5\u3057\u3066\u3044\u308b\u306e\u3067\u300chttp:\/\/localhost:8080\u300d\u3068\u3044\u3046\u5177\u5408\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u308c\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u305f\u3044\u5834\u5408\u306f<code>@OpenAPIDefinition<\/code>\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>@Configuration\n@OpenAPIDefinition(\n        servers = {\n                @Server(url = \"https:\/\/&lt;\u958b\u767a\u74b0\u5883\u30c9\u30e1\u30a4\u30f3&gt;\", description = \"\u958b\u767a\u74b0\u5883\"),\n                @Server(url = \"https:\/\/&lt;\u672c\u756a\u74b0\u5883\u30c9\u30e1\u30a4\u30f3&gt;\", description = \"\u672c\u756a\u74b0\u5883\")\n        }\n)\npublic class SwaggerAutoConfiguration {\n    \/\/ \u30af\u30e9\u30b9\u306e\u4e2d\u8eab\u306f\u7a7a\u3067\u3082OK\n}<\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"172\" src=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/cd67091050c89435110b76699d1ea3f9.png\" alt=\"\" class=\"wp-image-463\" srcset=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/cd67091050c89435110b76699d1ea3f9.png 750w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/cd67091050c89435110b76699d1ea3f9-300x69.png 300w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\"><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"712\" height=\"178\" src=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/3dd47ba058c30c782c208aced751d560.png\" alt=\"\" class=\"wp-image-464\" srcset=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/3dd47ba058c30c782c208aced751d560.png 712w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/3dd47ba058c30c782c208aced751d560-300x75.png 300w\" sizes=\"auto, (max-width: 712px) 100vw, 712px\"><\/figure>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u8aac\u660e<\/h3>\n\n\n\n<p>\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f<code>\/sample<\/code>\u3068\u3044\u3046\u3088\u3046\u306b\u30d1\u30b9\u306e\u60c5\u5831\u306e\u307f\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001<br><code>@Operation<\/code>\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u300csummary\u300d\u3068\u300cdescription\u300d\u3092\u8ffd\u52a0\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>    @PostMapping(value = \"\/sample\",\n            consumes = MediaType.APPLICATION_JSON_VALUE,\n            produces = MediaType.APPLICATION_JSON_VALUE\n    )\n    @Operation(summary = \"\u30e6\u30fc\u30b6\u767b\u9332\", description = \"\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u6307\u5b9a\u3055\u308c\u305f\u60c5\u5831\u3067\u30e6\u30fc\u30b6\u3092\u767b\u9332\u3057\u307e\u3059\u3002\")\n    public void register(@RequestBody @Valid User request) {\n        return;\n    }<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/770125a8df39719df91cf246c247dcef.png\" alt=\"\" class=\"wp-image-466\" width=\"541\" height=\"150\" srcset=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/770125a8df39719df91cf246c247dcef.png 1022w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/770125a8df39719df91cf246c247dcef-300x83.png 300w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/770125a8df39719df91cf246c247dcef-768x213.png 768w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/770125a8df39719df91cf246c247dcef-940x261.png 940w\" sizes=\"auto, (max-width: 541px) 100vw, 541px\"><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u30bf\u30b0<\/h3>\n\n\n\n<p>swagger\u3067\u306f\u3001tags\u3067API\u3092\u30b0\u30eb\u30fc\u30d4\u30f3\u30b0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u3001<br>springdoc\u3067\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067Controller\u3054\u3068\u306btag\u304c\u81ea\u52d5\u3067\u4ed8\u4e0e\u3055\u308c\u3001tag\u306e\u540d\u524d\u306fController\u30af\u30e9\u30b9\u540d\u3092\u3082\u3068\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u308c\u3092\u5909\u66f4\u3057\u305f\u3044\u5834\u5408\u306f\u3001<code>@Tag<\/code>\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>@Tag(name = \"Sample API\")\npublic class SampleController {\n    ...\n}<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/1fff802a9c294d8f0d2f5650f22a362b.png\" alt=\"\" class=\"wp-image-467\" width=\"507\" height=\"223\" srcset=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/1fff802a9c294d8f0d2f5650f22a362b.png 924w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/1fff802a9c294d8f0d2f5650f22a362b-300x132.png 300w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/1fff802a9c294d8f0d2f5650f22a362b-768x337.png 768w\" sizes=\"auto, (max-width: 507px) 100vw, 507px\"><\/figure>\n\n\n<p><\/p><div class=\"memo \"><div class=\"memo_ttl dfont\"> \u30e1\u30e2<\/div>\u540c\u3058name\u3092\u4f7f\u3048\u3070Controller\u304c\u5225\u3067\u3082\u540c\u3058tag\u3067\u8868\u793a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff01<\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u30e2\u30c7\u30eb\u306b\u8aac\u660e\u3084\u30b5\u30f3\u30d7\u30eb\u306e\u5024\u3092\u8ffd\u52a0\u3059\u308b<\/h3>\n\n\n\n<p><code>@Schema<\/code>\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u30e2\u30c7\u30eb\u30af\u30e9\u30b9\u306e\u5404\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u60c5\u5831\u3092\u8ffd\u52a0\u3067\u304d\u307e\u3059\uff01<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>    @Value\n    public static class User {\n        @NotNull\n        @Pattern(regexp = \"[0-9a-f-]{36}\")\n        @Schema(title = \"\u30e6\u30fc\u30b6\u8b58\u5225\u5b50\", description = \"\u4e00\u610f\u306b\u306a\u308b\u3088\u3046UUID\u7b49\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\", example = \"1\")\n        private String id;\n\n        ...\n    }<\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"762\" height=\"394\" src=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/a184823f2d0b1a2720e7099a31457db1.png\" alt=\"\" class=\"wp-image-469\" srcset=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/a184823f2d0b1a2720e7099a31457db1.png 762w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/a184823f2d0b1a2720e7099a31457db1-300x155.png 300w\" sizes=\"auto, (max-width: 762px) 100vw, 762px\"><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"284\" src=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/6093a67803f5f1db29b549c6aa577289.png\" alt=\"\" class=\"wp-image-470\" srcset=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/6093a67803f5f1db29b549c6aa577289.png 1024w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/6093a67803f5f1db29b549c6aa577289-300x83.png 300w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/6093a67803f5f1db29b549c6aa577289-768x213.png 768w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/6093a67803f5f1db29b549c6aa577289-940x261.png 940w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\"><\/figure>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u8aac\u660e\u3084\u30b5\u30f3\u30d7\u30eb\u306e\u5024\u3092\u8ffd\u52a0\u3059\u308b<\/h3>\n\n\n\n<p><code>@Parameter<\/code>\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u5404\u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u60c5\u5831\u3092\u8ffd\u52a0\u3067\u304d\u307e\u3059\uff01<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>    @GetMapping(value = \"\/sample\", produces = MediaType.APPLICATION_JSON_VALUE)\n    public User get(\n            @Pattern(regexp = \"[0-9a-f-]{36}\") @Parameter(example = \"123\", description = \"\u30e6\u30fc\u30b6\u8b58\u5225\u5b50\") String id\n    ) {\n        return new User(\"1234567890\", \"hogehoge\", 30);\n    }<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/80f93da35e3b86053e92d97f077cb641-1024x471.png\" alt=\"\" class=\"wp-image-472\" width=\"608\" height=\"279\" srcset=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/80f93da35e3b86053e92d97f077cb641-1024x471.png 1024w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/80f93da35e3b86053e92d97f077cb641-300x138.png 300w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/80f93da35e3b86053e92d97f077cb641-768x353.png 768w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/80f93da35e3b86053e92d97f077cb641-940x433.png 940w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/80f93da35e3b86053e92d97f077cb641.png 1282w\" sizes=\"auto, (max-width: 608px) 100vw, 608px\"><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u5171\u901a\u306e\u30a8\u30e9\u30fc\u30ec\u30b9\u30dd\u30f3\u30b9<\/h3>\n\n\n\n<p><code>@ControllerAdvice<\/code>\u30af\u30e9\u30b9\u3067\u4f8b\u5916\u51e6\u7406\u3092\u3059\u308c\u3070\u81ea\u52d5\u3067\u5171\u901a\u30a8\u30e9\u30fc\u3082\u5b9a\u7fa9\u3057\u3066\u304f\u308c\u307e\u3059\uff01<br>\u203b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3068\u306f\u3061\u3087\u3063\u3068\u9055\u3044\u307e\u3059\u306dw<\/p>\n\n\n\n<p>\uff11\u3064\u3060\u3051\u6ce8\u610f\u304c\u3042\u3063\u3066\u30ec\u30b9\u30dd\u30f3\u30b9\u30b9\u30c6\u30fc\u30bf\u30b9\u306f<code>@ResponseStatus<\/code>\u3067\u5b9a\u7fa9\u3059\u308b\u3059\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u3087\u3046\u3002<br>\u203b<code>@ResponseStatus<\/code>\u304c\u306a\u3044\u3068springdoc\u304c\u53cd\u5fdc\u3057\u3066\u304f\u308c\u306a\u3044\u3088\u3046\u3067\u3057\u305f\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>@ControllerAdvice\npublic class SampleControllerAdvice {\n    @ExceptionHandler(Exception.class)\n    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)\n    public CommonErrorResponse handleException() {\n        return new CommonErrorResponse();\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>@Data\npublic class CommonErrorResponse {\n    @Schema(title = \"\u30a8\u30e9\u30fc\u30b3\u30fc\u30c9\", example = \"0001\")\n    private String errorCode;\n    @Schema(title = \"\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\", example = \"\u4e88\u671f\u305b\u306c\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\")\n    private String errorMessage;\n}<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/d93a0544bf2bc80c59b04f8c78674603-1024x426.png\" alt=\"\" class=\"wp-image-471\" width=\"574\" height=\"239\" srcset=\"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/d93a0544bf2bc80c59b04f8c78674603-1024x426.png 1024w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/d93a0544bf2bc80c59b04f8c78674603-300x125.png 300w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/d93a0544bf2bc80c59b04f8c78674603-768x319.png 768w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/d93a0544bf2bc80c59b04f8c78674603-1536x638.png 1536w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/d93a0544bf2bc80c59b04f8c78674603-2048x851.png 2048w, https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/d93a0544bf2bc80c59b04f8c78674603-940x391.png 940w\" sizes=\"auto, (max-width: 574px) 100vw, 574px\"><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-10\">ControllerAdvice\u3084ResponseStatus\u304c\u4f7f\u3048\u306a\u3044\u5834\u5408<\/h4>\n\n\n\n<p>\u4ee5\u4e0b\u306e\u3088\u3046\u306b<code>GroupedOpenApi<\/code>\u3092Bean\u767b\u9332\u3059\u308b\u3053\u3068\u3067\u540c\u7b49\u306e\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\uff01<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-java\" data-lang=\"Java\"><code>@Configuration\npublic class SwaggerAutoConfiguration {\n    @Bean\n    public GroupedOpenApi publicApi() {\n        return GroupedOpenApi.builder()\n                .group(\"sample apis\")\n                .addOpenApiCustomizer(new CommonErrorResponseCustomizer())\n                .build();\n    }\n\n    public static class CommonErrorResponseCustomizer implements OpenApiCustomizer {\n        @Override\n        public void customise(OpenAPI openApi) {\n            openApi.getComponents().getSchemas().putAll(ModelConverters.getInstance().read(CommonErrorResponse.class));\n            openApi.getPaths().values().forEach(pathItem -&gt; pathItem.readOperations().forEach(operation -&gt; {\n                ApiResponses apiResponses = operation.getResponses();\n                \n                Schema schema = new Schema();\n                schema.setName(\"CommonErrorResponse\");\n                schema.set$ref(\"#\/components\/schemas\/CommonErrorResponse\");\n\n                MediaType mediaType = new MediaType();\n                mediaType.schema(schema);\n                ApiResponse apiResponse = new ApiResponse()\n                        .content(new Content()\n                                .addMediaType(org.springframework.http.MediaType.APPLICATION_JSON_VALUE, mediaType));\n                apiResponses.addApiResponse(\"500\", apiResponse);\n            }));\n        }\n    }\n}<\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>API\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306fswagger\u304c\u30e1\u30b8\u30e3\u30fc\u304b\u3068\u601d\u3044\u307e\u3059\u304c\u3001\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u5b9f\u88c5\u3068\u3092\u30c0\u30d6\u30eb\u30e1\u30f3\u30c6\u3057\u3066\u3044\u304f\u306e\u3063\u3066\u306a\u304b\u306a\u304b\u96e3\u3057\u3044\u3067\u3059\u3088\u306d\u3002\u3002\u3002 \u305d\u3093\u306a\u8ab2\u984c\u3092\u89e3\u6c7a\u3057\u3066\u304f\u308c\u308b\u306e\u304cSpringDoc\u3067\u3001Contoller\u306e\u30b3\u30fc\u30c9\u304b &#8230; <\/p>\n","protected":false},"author":1,"featured_media":474,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[13,79,78],"class_list":{"0":"post-455","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-6","8":"tag-springboot","9":"tag-springdoc","10":"tag-swagger"},"jetpack_featured_media_url":"https:\/\/hirabay.net\/wp-content\/uploads\/2023\/02\/SpringBoot-1.png","_links":{"self":[{"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/posts\/455","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hirabay.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=455"}],"version-history":[{"count":7,"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/posts\/455\/revisions"}],"predecessor-version":[{"id":479,"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/posts\/455\/revisions\/479"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hirabay.net\/index.php?rest_route=\/wp\/v2\/media\/474"}],"wp:attachment":[{"href":"https:\/\/hirabay.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=455"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hirabay.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=455"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hirabay.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=455"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}