{"id":39964,"date":"2023-06-07T17:01:44","date_gmt":"2023-03-16T15:33:55","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8visual-studio-code%e5%ad%a6%e4%b9%a0spring-boot%e7%9a%84%e5%85%a5%e9%97%a8\/"},"modified":"2024-04-30T07:45:26","modified_gmt":"2024-04-29T23:45:26","slug":"%e7%94%a8visual-studio-code%e5%ad%a6%e4%b9%a0spring-boot%e7%9a%84%e5%85%a5%e9%97%a8","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8visual-studio-code%e5%ad%a6%e4%b9%a0spring-boot%e7%9a%84%e5%85%a5%e9%97%a8\/","title":{"rendered":"\u7528Visual Studio Code\u5b66\u4e60Spring Boot\u7684\u5165\u95e8"},"content":{"rendered":"<h1>1. \u8fd9\u7bc7\u6587\u7ae0\u7684\u5185\u5bb9<\/h1>\n<p>\u7531\u4e8e\u53ef\u80fd\u8981\u5728\u5f00\u53d1\u4e1a\u52a1\u4e2d\u4f7f\u7528Spring Framework\uff0c\u6240\u4ee5\u5c1d\u8bd5\u4f7f\u7528VS Code\u800c\u4e0d\u662fEclipse\u4f5c\u4e3a\u5f00\u53d1\u5de5\u5177\u3002\u6211\u8ba4\u4e3a\u5728Java\u5f00\u53d1\u4e2d\uff0c\u76ee\u524d\u4e3b\u6d41\u662f\u4f7f\u7528Eclipse\uff0c\u4f46\u5c06\u6765\u53ef\u80fd\u4f1a\u589e\u52a0\u4f7f\u7528VS Code\u7684\u60c5\u51b5\u3002<\/p>\n<h1>2. \u5173\u4e8e Spring \u6846\u67b6\u7684\u590d\u4e60<\/h1>\n<p>\u5728\u5f00\u59cb\u8fd9\u4e2a\u95ee\u9898\u4e4b\u524d\uff0c\u6211\u4f1a\u7b80\u5355\u5730\u56de\u987e\u4e00\u4e0bSpring Framework\u3002<\/p>\n<h2>(1) Spring Boot \u662f\u4ec0\u4e48\u6765\u7740\uff1f\u548c Spring Framework \u6709\u4ec0\u4e48\u4e0d\u540c\uff1f<\/h2>\n<p>\u6839\u636e\u300aSpring \u5fb9\u5e95\u5165\u9580\u300b\u4e00\u4e66\u7684\u4ecb\u7ecd\uff0cSpring Boot \u662f\u4e00\u4e2a\u7528\u4e8e\u7b80\u5316\u5f00\u53d1\u751f\u4ea7\u7ea7\u522b\u7684Spring\u5e94\u7528\u7a0b\u5e8f\u7684Spring\u9879\u76ee\uff0c\u53ea\u9700\u6700\u5c11\u7684\u914d\u7f6e\u5373\u53ef\u3002\u6211\u4eec\u53ef\u4ee5\u5c06\u5176\u89c6\u4e3a\u4f7f\u7528Spring Framework\u7684\u201c\u5373\u63d2\u5373\u7528\u5957\u4ef6\u201d\u3002\u56e0\u6b64\uff0c\u53ef\u4ee5\u8bf4\u901a\u8fc7Spring Boot\u521b\u5efa\u7684\u5e94\u7528\u7a0b\u5e8f\u662f\u7531Spring Framework\u6784\u5efa\u7684\u3002\u5b83\u662f\u4e3a\u90a3\u4e9b\u60f3\u5c1d\u8bd5\u4f7f\u7528Spring Framework\uff0c\u800c\u4e0d\u60f3\u88ab\u7e41\u7410\u7684\u7ec6\u8282\u6216\u9ebb\u70e6\u4e8b\u6240\u56f0\u6270\u7684\u4eba\u4eec\u51c6\u5907\u7684\u4e00\u79cd\u964d\u4f4e\u5165\u95e8\u95e8\u69db\u7684\u7b80\u5316\u673a\u5236\u3002<\/p>\n<ul class=\"post-ul\">Spring Boot \u306e\u6982\u8981\u3068\u30b5\u30dd\u30fc\u30c8\u671f\u9593 &#8211; \u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8 (pleiades.io)<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Spring Boot \u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8 (pleiades.io)<\/ul>\n<p>&nbsp;<\/p>\n<h2>(2) Spring Framework\u662fJava EE\u7684\u4e00\u79cd\u5417\uff1f<\/h2>\n<p>\u6700\u521d\u5f00\u53d1Spring\u65f6\uff08\u5927\u7ea62004\u5e74\uff09\uff0cJavaEE\u8fd8\u4e0d\u5b58\u5728\uff0c\u800c\u662f\u5b58\u5728\u5176\u524d\u8eab\u79f0\u4e3a&#8221;J2EE&#8221;\u7684\u6807\u51c6\u89c4\u8303\u3002\u4eceJ2EE\u7684\u7b2c5\u4e2a\u7248\u672c\u5f00\u59cb\uff0c\u5b83\u6539\u540d\u4e3aJava EE\uff08\u8fdb\u4e00\u6b65\u5728\u7b2c9\u4e2a\u7248\u672c\u6539\u540d\u4e3aJakarta EE\uff09\u3002J2EE\/Java EE\/Jakarta EE\u662fJava\u4f01\u4e1a\u7ea7\u529f\u80fd\u7684\u6807\u51c6\u89c4\u8303\uff0c\u5b83\u672c\u8eab\u4e0d\u662f\u4e00\u4e2a\u6846\u67b6\uff0c\u800c\u662f\u4e00\u79cd\u89c4\u8303\u3002\u6240\u4ee5Spring Framework\u4e0d\u662fJavaEE\u7684\u4e00\u79cd\uff0c\u5b83\u662f\u4e0eJavaEE\u76f8\u7b26\u5408\u6216\u4e0d\u7b26\u5408\u7684\u5173\u7cfb\u3002\u76ee\u524d\u6765\u770b\uff0c\u53ef\u4ee5\u8bf4Spring Framework&#8221;\u90e8\u5206\u7b26\u5408&#8221;JavaEE\uff0c\u4f46\u5e76\u4e0d\u5b8c\u5168\u7b26\u5408\u3002\u6700\u521dSpring Framework\u7684\u8bbe\u8ba1\u521d\u8877\u662f\u53cd\u5bf9J2EE\/JavaEE\u7684\u7e41\u6742\u96be\u7528\uff0c\u56e0\u6b64\u5f3a\u8c03\u8f7b\u4fbf\u6613\u7528\u3002\u7531\u4e8e\u4e24\u8005\u53d6\u957f\u8865\u77ed\uff0c\u6240\u4ee5\u4e00\u4e9b\u529f\u80fd\u6709\u76f8\u4f3c\u6216\u91cd\u53e0\u4e4b\u5904\uff0c\u9010\u6e10\u8d8b\u5411\u76f8\u4f3c\u7684\u65b9\u5411\u3002<\/p>\n<p>\u73b0\u5728\u6211\u4eec\u5c31\u7ed3\u675f\u590d\u4e60\uff0c\u5f00\u59cb\u6b63\u9898\u3002<\/p>\n<h1>2. \u4f7f\u7528\u8fc7\u7684\u7248\u672c gu\u00f2 de<\/h1>\n<h2>(1) Windows 11 \u4e13\u4e1a\u7248<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30d0\u30fc\u30b8\u30e7\u30f3: 22H2<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">OS\u30d3\u30eb\u30c9: 22621.1105<\/ul>\n<p>\u6211\u8ba4\u4e3a\uff0c\u53ea\u662f\u5076\u5c14\u4f7f\u7528\u8fd9\u4e2a\u95ee\u9898\uff0c\u5bf9\u4e8e\u672c\u6587\u5185\u5bb9\u800c\u8a00\uff0c\u5728Windows10\u4e0a\u6ca1\u6709\u95ee\u9898\u3002<\/p>\n<h2>(2) \u5f00\u653eJDK<\/h2>\n<pre class=\"post-pre\"><code>&gt;java -version\r\nopenjdk version \"17.0.6\" 2023-01-17 LTS\r\nOpenJDK Runtime Environment (Red_Hat-17.0.6.0+10-1) (build 17.0.6+10-LTS)\r\nOpenJDK 64-Bit Server VM (Red_Hat-17.0.6.0+10-1) (build 17.0.6+10-LTS, mixed mode, sharing)\r\n<\/code><\/pre>\n<p>\u8fd9\u6b21\u6211\u4eec\u4f7f\u7528\u4e86Red Hat\uff0c\u4f46\u6211\u89c9\u5f97JDK\u5728Oracle OpenJDK\u4e0a\u4e5f\u6ca1\u6709\u95ee\u9898\u3002<br \/>\n\u4e3a\u4ec0\u4e48\u9009\u62e9Red Hat\uff0c\u662f\u56e0\u4e3a\u5728VS Code\u4e0a\u663e\u793a\u4e86\u8fd9\u4e2a\u94fe\u63a5\u8981\u4f7f\u7528\u5b83\u3002\u6211\u4e0d\u6e05\u695a\u4e3a\u4ec0\u4e48\u4f1a\u63a8\u8350Red Hat\u7248\uff0c\u4f46\u8003\u8651\u5230VSCode\u7684Java\u8bed\u8a00\u652f\u6301\u6269\u5c55\u662fRed Hat\u7684\u4ea7\u54c1\uff0c\u6240\u4ee5JDK\u4e5f\u6700\u597d\u914d\u5957\u4f7f\u7528\uff0c\u76f8\u5bb9\u6027\u5e94\u8be5\u4f1a\u66f4\u597d\u3002<\/p>\n<h2>(3) \u6625\u5b63\u6846\u67b6<\/h2>\n<p>\u4ecepom.xml\u4e2d<\/p>\n<pre class=\"post-pre\"><code><span class=\"nt\">&lt;groupId&gt;<\/span>org.springframework.boot<span class=\"nt\">&lt;\/groupId&gt;<\/span>\r\n<span class=\"nt\">&lt;artifactId&gt;<\/span>spring-boot-starter-parent<span class=\"nt\">&lt;\/artifactId&gt;<\/span>\r\n<span class=\"nt\">&lt;version&gt;<\/span>3.0.2<span class=\"nt\">&lt;\/version&gt;<\/span>\r\n<\/code><\/pre>\n<p>\u8fd9\u4e0d\u592a\u662f\u524d\u63d0\uff0c\u66f4\u50cf\u662f\u5728\u521b\u5efaSpring Boot\u9879\u76ee\u65f6\u9009\u62e9\u8be5\u7248\u672c\uff0c\u8ba1\u5212\u4f7f\u75283.0.2\u7248\u672c\u3002<\/p>\n<h2>(4) Visual Studio Code<br \/>\n(4) \u53ef\u89c6\u5316\u5de5\u4f5c\u5ba4\u4ee3\u7801<\/h2>\n<pre class=\"post-pre\"><code>\u30d0\u30fc\u30b8\u30e7\u30f3: 1.75.1 (user setup)\r\n\u30b3\u30df\u30c3\u30c8: 441438abd1ac652551dbe4d408dfcec8a499b8bf\r\n \u65e5\u4ed8: 2023-02-08T21:32:34.589Z\r\nElectron: 19.1.9\r\nChromium: 102.0.5005.194\r\nNode.js: 16.14.2\r\nV8: 10.2.154.23-electron.0\r\nOS: Windows_NT x64 10.0.22621\r\nSandboxed: Yes\r\n<\/code><\/pre>\n<h1>3. \u73af\u5883\u8bbe\u7f6e\u6b65\u9aa4<\/h1>\n<p>\u5047\u8bbeJDK\u548cVS Code\u5df2\u7ecf\u5b89\u88c5\u597d\u4e86\uff0c\u4f5c\u4e3a\u4efb\u52a1\u7684\u524d\u63d0\u3002<\/p>\n<h2>\u5b89\u88c5 Visual Studio Code \u7684 Java \u6269\u5c55\u5305 Extension Pack\u3002<\/h2>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/29-0.png\" alt=\"Extension Pack for Java1.png\" \/><\/div>\n<p>\u8fd9\u662f\u4e00\u4e2a\u63a8\u8350\u7528\u4e8e\u5728VS Code\u4e0a\u8fdb\u884cJava\u5f00\u53d1\u7684\u6269\u5c55\u63d2\u4ef6\u5408\u96c6\u3002\u5305\u62ec\u4ee5\u4e0b\u6269\u5c55\u63d2\u4ef6\u3002<\/p>\n<p>? Language Support for Java\u2122 by Red Hat<br \/>\n\u88dc\u5b8c\u3001\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u3001\u30b9\u30cb\u30da\u30c3\u30c8\u306e\u30b5\u30dd\u30fc\u30c8<\/p>\n<p>? Debugger for Java<br \/>\n\u30c7\u30d0\u30c3\u30b0\u6a5f\u80fd<\/p>\n<p>? Test Runner for Java<br \/>\nJUnit\/TestNG \u5bfe\u5fdc<\/p>\n<p>? Maven for Java<br \/>\n\u30d3\u30eb\u30c9\u30c4\u30fc\u30eb\u306eMaven \u3092\u4f7f\u3046\u62e1\u5f35\u6a5f\u80fd\u3067\u3059\u3002<\/p>\n<p>? Project Manager for Java<br \/>\nJava\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7ba1\u7406\u6a5f\u80fd\u3002\u3053\u3053\u3067\u3044\u3046\u300c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u300d\u306f\u30bd\u30fc\u30b9\u3084\u30ea\u30bd\u30fc\u30b9\u985e\u3092\u675f\u306d\u305f\u3082\u306e\u3001\u3068\u3044\u3046\u610f\u5473\u3067\u3001Eclipse \u4e0a\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u540c\u3058\u3088\u3046\u306b\u8003\u3048\u308c\u3070\u3088\u3044\u3067\u3059\u3002<\/p>\n<p>? Visual Studio IntelliCode<br \/>\nAI\u306b\u3088\u308b\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u652f\u63f4\u6a5f\u80fd\u3002\u30b3\u30fc\u30c9\u88dc\u5b8c\u306e\u3068\u304d\u306b\u3044\u308d\u3044\u308d\u30b5\u30b8\u30a7\u30b9\u30c8\u3057\u3066\u304f\u308c\u307e\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/32-0.png\" alt=\"Extension Pack for Java2.png\" \/><\/div>\n<h2>\u5b89\u88c5VS Code\u7684Spring Boot Extension Pack\u6269\u5c55\u529f\u80fd\u3002<\/h2>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/34-0.png\" alt=\"Spring Boot Extension Pack.png\" \/><\/div>\n<p>\u8fd9\u4e2a\u6269\u5c55\u529f\u80fd\u5305\u5305\u62ec\u4ee5\u4e0b\u5185\u5bb9\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/36-0.png\" alt=\"Spring Boot Extension Pack2.png\" \/><\/div>\n<p>\u4f7f\u7528\u6b64\u65b9\u6cd5\u5b89\u88c5\u6240\u9700\u5de5\u5177\u5df2\u5b8c\u6210\uff0c\u4f5c\u4e3a\u6784\u5efaHelloWorld\u6240\u9700\u7684\u73af\u5883\u642d\u5efa\u5df2\u7ecf\u7ed3\u675f\u3002\u5c1d\u8bd5\u540e\u53d1\u73b0\u6bd4\u9884\u60f3\u4e2d\u7b80\u5355\uff0c\u4f46\u6211\u8ba4\u4e3a\u5728\u5f00\u53d1\u5b9e\u7528\u7684\u5e94\u7528\u7a0b\u5e8f\u65f6\uff0c\u8fd8\u9700\u8981\u51c6\u5907\u5176\u4ed6\u7684DBMS\u73af\u5883\u3002<\/p>\n<h1>4. \u521b\u5efaSpring Boot\u9879\u76ee<\/h1>\n<p>\u6211\u60f3\u7acb\u523b\u521b\u5efa\u4e00\u4e2a\u7c7b\u4f3cHelloWorld\u7684\u6700\u5c0f\u9879\u76ee\u3002<\/p>\n<h2>\u521b\u5efa\u4e00\u4e2aJava\u9879\u76ee<\/h2>\n<p>\u6253\u5f00\u4fa7\u8fb9\u680f\u7684\u201c\u8d44\u6e90\u7ba1\u7406\u5668\u201d\u800c\u4e0d\u6253\u5f00\u5176\u4ed6\u4efb\u4f55\u4e1c\u897f\uff0c\u5c4f\u5e55\u5de6\u4fa7\u4f1a\u663e\u793a\u5982\u4e0b\u56fe\u6240\u793a\u7684\u4e09\u4e2a\u6309\u94ae\u3002\u63a5\u4e0b\u6765\uff0c\u70b9\u51fb\u201c\u521b\u5efaJava\u9879\u76ee\u201d\u6309\u94ae\uff0c\u4f1a\u5728\u4e3b\u83dc\u5355\u4e2d\u90e8\u6253\u5f00\u4e00\u4e2a\u4e0b\u62c9\u83dc\u5355\u3002\u56e0\u4e3a\u662f\u201c\u9009\u62e9\u9879\u76ee\u7c7b\u578b\u201d\uff0c\u6240\u4ee5\u9700\u8981\u9009\u62e9\u9879\u76ee\u7684\u7c7b\u578b\u3002\u6211\u4eec\u77e5\u9053Maven\u3001Gradle\u3001JavaFX\u90fd\u662f\u9879\u76ee\u7c7b\u578b\uff0c\u4f46\u662fQuarkus\u662f\u4ec0\u4e48\u5462\uff1f\u770b\u8d77\u6765\u5b83\u662f\u4e00\u4e2a\u7279\u5b9a\u4e8eKubernetes\u7684Java\u6846\u67b6\u3002\u800cMicroProfile\u5219\u662f\u4e00\u79cd\u4e13\u6ce8\u4e8e\u5fae\u670d\u52a1\u67b6\u6784\u7684\u6846\u67b6\uff0c\u56e0\u6b64\u53ef\u80fd\u4f1a\u521b\u5efa\u4e0e\u6b64\u76f8\u5e94\u7684\u9879\u76ee\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u5927\u6982\u4f1a\u9009\u62e9\u6700\u7b80\u5355\u7684\u201cSpring Boot\u201d\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/42-1.png\" alt=\"Select project type.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/43-0.png\" alt=\"Spring boot version.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/44-0.png\" alt=\"Project Language.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/45-0.png\" alt=\"Group ID.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/46-0.png\" alt=\"artifact id.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/47-0.png\" alt=\"Packaging TYpe.png\" \/><\/div>\n<p>\u5982\u679c\u5c06\u6253\u5305\u7c7b\u578b\u8bbe\u7f6e\u4e3aJar\uff0c\u5219Spring Boot\u5e94\u7528\u7a0b\u5e8f\u5c06\u88ab\u6253\u5305\u4e3a\u4e00\u4e2a\u5355\u72ec\u7684Jar\u6587\u4ef6\u3002\u8be5Jar\u6587\u4ef6\u5305\u542b\u4e86\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u4f9d\u8d56\u5173\u7cfb\u3002\u5982\u679c\u5c06\u8be5Jar\u4f5c\u4e3a\u72ec\u7acb\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\uff0c\u6240\u6709\u5fc5\u9700\u7684\u7ec4\u4ef6\u5c06\u81ea\u52a8\u52a0\u8f7d\u3002\u5728\u672c\u5730\u73af\u5883\u6267\u884c\u65f6\uff0c\u8fd8\u5305\u62ecSpring Boot Tomcat\u4f5c\u4e3a\u5e94\u7528\u7a0b\u5e8f\u5bb9\u5668\u3002\u5982\u679c\u9009\u62e9\u5c06\u5176\u6253\u5305\u4e3aWar\uff0c\u5219Tomcat\u5c06\u4e0d\u5305\u542b\u5728\u5185\uff0c\u9700\u8981\u53e6\u5916\u51c6\u5907\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5728\u672c\u5730\u73af\u5883\u8fdb\u884c\u5f00\u53d1\u548c\u6267\u884c\u65f6\uff0c\u8bf7\u9009\u62e9Jar\u6587\u4ef6\uff0c\u800c\u5728\u90e8\u7f72\u5230\u751f\u4ea7\u670d\u52a1\u5668\u4e0a\u65f6\uff0c\u8bf7\u9009\u62e9War\u6587\u4ef6\u3002<\/p>\n<p>\u5173\u4e8e\u9009\u62e9\u5c06\u5176\u653e\u5165 Jar \u6587\u4ef6\u6216\u8005 War \u6587\u4ef6\u4e4b\u95f4\u7684\u5dee\u5f02\u5728\u8fd9\u4e00\u90e8\u5206\u6709\u6240\u63cf\u8ff0\u3002<\/p>\n<p>&nbsp;<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/51-0.png\" alt=\"JDK version.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/52-0.png\" alt=\"Dependency.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/53-0.png\" alt=\"Sucessfully.png\" \/><\/div>\n<ul class=\"post-ul\">Spring Boot \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210 &#8211; Spring Initializr (pleiades.io)<\/ul>\n<p>&nbsp;<\/p>\n<p>\u4ee5\u4e0b\u7684\u6d88\u606f\u5c07\u5728\u5c4f\u5e55\u53f3\u4e0b\u65b9\u986f\u793a\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/57-0.png\" alt=\"View Project.png\" \/><\/div>\n<h1>\u6253\u5f00\u5df2\u751f\u6210\u7684Spring Boot\u9879\u76ee<\/h1>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/59-0.png\" alt=\"Open project.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/60-0.png\" alt=\"HelloApplication.png\" \/><\/div>\n<h2>(1) \u5148\u8bd5\u8bd5\u8fd0\u884c\u4e00\u4e0b<\/h2>\n<p>\u5728 main \u65b9\u6cd5\u4e0a\u65b9\u663e\u793a\u4e86 &#8220;\u8fd0\u884c | \u8c03\u8bd5&#8221;\u3002\u4e00\u6309\u8fd0\u884c\u6309\u94ae\uff0c\u770b\u8d77\u6765\u5c31\u50cf\u662f\u5f00\u59cb\u8dd1\u4e86\u3002\u53ea\u7528\u8fd9\u6837\u4f1a\u8fd0\u884c\u5417\uff1f<br \/>\n\u6211\u8bd5\u4e00\u8bd5\u6309\u4e0b\u53bb\u3002\u7136\u540e\u5b83\u5f00\u59cb\u52a8\u4e86\u8d77\u6765&#8230;<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/63-0.png\" alt=\"Run.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/64-0.png\" alt=\"Error Page.png\" \/><\/div>\n<h2>\u5199\u4e00\u4e2a\u6700\u7b80\u5355\u7684Controller\u7c7b\u3002<\/h2>\n<p>\u770b\u6765\u81f3\u5c11\u9700\u8981\u638c\u63e1\u57fa\u672c\u7684\u7f16\u7a0b\u6280\u80fd\uff0c\u4f3c\u4e4e\u81f3\u5c11\u9700\u8981\u81ea\u5df1\u51c6\u5907MVC\u6a21\u5f0f\u4e2d\u7684C\uff08\u63a7\u5236\u5668\uff09\u7c7b\u3002<\/p>\n<p>\u3010\u53c2\u8003\u62a5\u9053\u3011<\/p>\n<p>&nbsp;<\/p>\n<p>Controller \u7c7b\u662f\u4e00\u4e2a\u6dfb\u52a0\u4e86 @Controller \u6216 @RestController \u6ce8\u89e3\u7684\u7c7b\u3002<\/p>\n<p>\u3010Javadoc\u3011\u4e2d\u6587\u7ffb\u8bd1\uff1a\u6587\u6863\u6ce8\u91ca<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Controller (Spring Framework API) &#8211; Javadoc (pleiades.io)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">RestController (Spring Framework API) &#8211; Javadoc (pleiades.io)<\/ul>\n<p>\u4e24\u8005\u7684\u533a\u522b\u4f3c\u4e4e\u5728\u4e8e\uff0c@Controller\u901a\u5e38\u7528\u4e8e\u666e\u901a\u7684Web\u5e94\u7528\u63a7\u5236\u5668\uff0c\u800c@RestController\u7528\u4e8e\u521b\u5efaREST API\u7684\u63a7\u5236\u5668\u3002\u8fd9\u91cc\u7684\u201c\u4f3c\u4e4e\u201d\u662f\u56e0\u4e3a\u5728\u6587\u6863\u4e2d\u627e\u4e0d\u5230\u660e\u786e\u7684\u63cf\u8ff0\uff0c\u53ef\u80fd\u662f\u56e0\u4e3a\u592a\u8fc7\u660e\u663e\u800c\u6ca1\u6709\u5199\uff0c\u6216\u8005\u5728\u9605\u8bfbSpring MVC\u6587\u6863\u65f6\u6709\u76f8\u5173\u8bf4\u660e\u3002\u6839\u636e\u9605\u8bfb\u4e0a\u9762\u7684Qiita\u6587\u7ae0\uff0c@RestController\u53ef\u4ee5\u5728\u4e0d\u5199@ResponseBody\u7684\u60c5\u51b5\u4e0b\u4f7f\u7528\uff0c\u6240\u4ee5\u5982\u679c\u53ea\u662f\u7b80\u5355\u4f7f\u7528\u7684\u8bdd\uff0c\u53ef\u4ee5\u8003\u8651\u4f7f\u7528@RestController\u3002\u6211\u9a6c\u4e0a\u5c31\u5199\u4e00\u4e0b\u770b\u770b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.anestec.hello<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.RestController<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@RestController<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">HelloApplicationController<\/span> <span class=\"o\">{<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5f53\u6211\u518d\u6b21\u8fd0\u884c\uff0c\u5e76\u6ca1\u6709\u53d1\u751f\u4efb\u4f55\u53d8\u5316\uff08404\u9519\u8bef\uff09\u3002\u4f3c\u4e4e\u8fd8\u9700\u8981\u4e00\u4e9b\u5176\u4ed6\u7684\u4e1c\u897f\u3002\u6839\u636e\u4e0a\u8ff0\u7684\u535a\u6587\uff0c\u5728\u65b9\u6cd5\u4e0a\u6dfb\u52a0 @RequestMapping \u6ce8\u89e3\u662f\u5fc5\u9700\u7684\u3002\u6839\u636e\u5b98\u65b9\u6587\u6863\uff0c\u4e0b\u9762\u6709\u76f8\u5173\u8bf4\u660e\u3002<\/p>\n<p>\u3010\u53c2\u8003\u6587\u732e\u3011<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30ea\u30af\u30a8\u30b9\u30c8\u30de\u30c3\u30d4\u30f3\u30b0(Spring MVC\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Spring Boot 3.0 \u5165\u9580 &#8211; \u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8 (pleiades.io)<\/ul>\n<blockquote><p>\u4f7f\u7528@RequestMapping\u6ce8\u89e3\u53ef\u4ee5\u5c06\u8bf7\u6c42\u6620\u5c04\u5230\u63a7\u5236\u5668\u65b9\u6cd5\u3002<\/p>\n<p>@RequestMapping\u6ce8\u89e3\u63d0\u4f9b\u4e86\u201c\u8def\u7531\u201d\u4fe1\u606f\u3002\u5177\u6709\u7279\u5b9a\u8def\u5f84\u7684HTTP\u8bf7\u6c42\u9700\u8981\u6620\u5c04\u5230home\u65b9\u6cd5\uff0c\u4ee5\u4fbf\u5c06\u4fe1\u606f\u4f20\u8fbe\u7ed9Spring\u3002@RestController\u6ce8\u89e3\u6307\u793aSpring\u76f4\u63a5\u5c06\u7ed3\u679c\u5b57\u7b26\u4e32\u8fd4\u56de\u7ed9\u8c03\u7528\u8005\u3002<\/p><\/blockquote>\n<p>\u7531\u4e8e\u662fREST API\uff0c\u56e0\u6b64\u9700\u8981\u5c06\u8bf7\u6c42\u7684URL\u8def\u7531\u6620\u5c04\u5230\u7c7b\u7684\u65b9\u6cd5\u4e2d\uff0c\u6211\u8ba4\u4e3a\u8fd9\u5e94\u8be5\u662f\u4e3a\u6b64\u76ee\u7684\u800c\u5b58\u5728\u7684\u6ce8\u89e3\u3002<br \/>\n\u53ea\u9700\u521b\u5efa\u4e00\u4e2a\u8fd4\u56de&#8221;Hello World&#8221;\u7684\u65b9\u6cd5\u6765\u54cd\u5e94\u6839\u8def\u5f84(&#8220;\/&#8221;)\u5373\u53ef\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.anestec.hello<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.RequestMapping<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.RestController<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@RestController<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">HelloApplicationController<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"nd\">@RequestMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/\"<\/span><span class=\"o\">)<\/span>  <span class=\"c1\">\/\/ \u30eb\u30fc\u30c8\u3078\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u30de\u30c3\u30d7\u3059\u308b<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"nc\">String<\/span> <span class=\"nf\">test<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"s\">\"Hello World\"<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h2>(3) \u518d\u6b21\u8fd0\u884c\u2192\u8bd5\u8bd5\u770b\u5c55\u793a<\/h2>\n<p>\u6211\u5c06\u4ee5\u6b64\u72b6\u6001\u518d\u6b21\u8fd0\u884c\u4e00\u6b21\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/82-0.png\" alt=\"Hello Success.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/83-0.png\" alt=\"HTML source.png\" \/><\/div>\n<pre class=\"post-pre\"><code>C:\\&gt;curl -v localhost:8080\r\n*   Trying 127.0.0.1:8080...\r\n* Connected to localhost (127.0.0.1) port 8080 (#0)\r\n&gt; GET \/ HTTP\/1.1\r\n&gt; Host: localhost:8080\r\n&gt; User-Agent: curl\/7.83.1\r\n&gt; Accept: *\/*\r\n&gt;\r\n* Mark bundle as not supporting multiuse\r\n&lt; HTTP\/1.1 200\r\n&lt; Content-Type: text\/plain;charset=UTF-8\r\n&lt; Content-Length: 11\r\n&lt; Date: Thu, 16 Feb 2023 06:15:45 GMT\r\n&lt;\r\nHello World* Connection #0 to host localhost left intact\r\n<\/code><\/pre>\n<p>\u7531\u4e8e\u5b83\u4f5c\u4e3a REST API \u8fd0\u884c\uff0c\u6240\u4ee5\u54cd\u5e94\u4f3c\u4e4e\u53ea\u8fd4\u56de\u4e86\u65b9\u6cd5\u8fd4\u56de\u7684\u5b57\u7b26\u4e32\u3002\u4ece Content-Length:11 \u53ef\u4ee5\u770b\u51fa\u8fd9\u4e00\u70b9\u3002\u672c\u6765\u5e94\u8be5\u5728\u8fd9\u91cc\u8fd4\u56de JSON \u5b57\u7b26\u4e32\u3002<\/p>\n<h2>\u8fdb\u884c\u8c03\u8bd5\u6267\u884c\u8bd5\u8bd5\u770b<\/h2>\n<p>\u8fd9\u6b21\u8ba9\u6211\u4eec\u4eceHelloApplication\u7c7b\u4e2d\u6309\u4e0b\u201cDebug\u201d\u6309\u94ae\u5e76\u8fdb\u884c\u8c03\u8bd5\u8fd0\u884c\u3002\u5728\u4e8b\u5148\u8bbe\u5b9a\u7684\u8fd4\u56de\u201cHello World\u201d\u7684\u5730\u65b9\u8bbe\u7acb\u4e00\u4e2a\u65ad\u70b9\uff0c\u5e76\u5728\u4ece\u6d4f\u89c8\u5668\u53d1\u9001\u8bf7\u6c42\u5e76\u5728\u8fd4\u56de\u54cd\u5e94\u4e4b\u524d\u6682\u505c\u6267\u884c\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/88-0.png\" alt=\"debug.png\" \/><\/div>\n<pre class=\"post-pre\"><code>HelloApplicationController.test() (c:\\work\\hello\\src\\main\\java\\com\\anestec\\hello\\HelloApplicationController.java:11)\r\nNativeMethodAccessorImpl.invoke0(Method,Object,Object[])[native method] (\u4e0d\u660e\u306a\u30bd\u30fc\u30b9:-1)\r\nNativeMethodAccessorImpl.invoke(Object,Object[]) (\u4e0d\u660e\u306a\u30bd\u30fc\u30b9:-1)\r\nDelegatingMethodAccessorImpl.invoke(Object,Object[]) (\u4e0d\u660e\u306a\u30bd\u30fc\u30b9:-1)\r\nMethod.invoke(Object,Object[]) (\u4e0d\u660e\u306a\u30bd\u30fc\u30b9:-1)\r\nInvocableHandlerMethod.doInvoke(Object[]) (\\spring-web-6.0.4.jar\\org.springframework.web.method.support\\InvocableHandlerMethod.class:207)\r\nInvocableHandlerMethod.invokeForRequest(NativeWebRequest,ModelAndViewContainer,Object[]) (\\spring-web-6.0.4.jar\\org.springframework.web.method.support\\InvocableHandlerMethod.class:152)\r\nServletInvocableHandlerMethod.invokeAndHandle(ServletWebRequest,ModelAndViewContainer,Object[]) (\\spring-webmvc-6.0.4.jar\\org.springframework.web.servlet.mvc.method.annotation\\ServletInvocableHandlerMethod.class:117)\r\nRequestMappingHandlerAdapter.invokeHandlerMethod(HttpServletRequest,HttpServletResponse,HandlerMethod) (\\spring-webmvc-6.0.4.jar\\org.springframework.web.servlet.mvc.method.annotation\\RequestMappingHandlerAdapter.class:884)\r\nRequestMappingHandlerAdapter.handleInternal(HttpServletRequest,HttpServletResponse,HandlerMethod) (\\spring-webmvc-6.0.4.jar\\org.springframework.web.servlet.mvc.method.annotation\\RequestMappingHandlerAdapter.class:797)\r\nAbstractHandlerMethodAdapter.handle(HttpServletRequest,HttpServletResponse,Object) (\\spring-webmvc-6.0.4.jar\\org.springframework.web.servlet.mvc.method\\AbstractHandlerMethodAdapter.class:87)\r\nDispatcherServlet.doDispatch(HttpServletRequest,HttpServletResponse) (\\spring-webmvc-6.0.4.jar\\org.springframework.web.servlet\\DispatcherServlet.class:1080)\r\nDispatcherServlet.doService(HttpServletRequest,HttpServletResponse) (\\spring-webmvc-6.0.4.jar\\org.springframework.web.servlet\\DispatcherServlet.class:973)\r\nFrameworkServlet.processRequest(HttpServletRequest,HttpServletResponse) (\\spring-webmvc-6.0.4.jar\\org.springframework.web.servlet\\FrameworkServlet.class:1011)\r\nFrameworkServlet.doGet(HttpServletRequest,HttpServletResponse) (\\spring-webmvc-6.0.4.jar\\org.springframework.web.servlet\\FrameworkServlet.class:903)\r\nHttpServlet.service(HttpServletRequest,HttpServletResponse) (\\tomcat-embed-core-10.1.5.jar\\jakarta.servlet.http\\HttpServlet.class:705)\r\nFrameworkServlet.service(HttpServletRequest,HttpServletResponse) (\\spring-webmvc-6.0.4.jar\\org.springframework.web.servlet\\FrameworkServlet.class:885)\r\nHttpServlet.service(ServletRequest,ServletResponse) (\\tomcat-embed-core-10.1.5.jar\\jakarta.servlet.http\\HttpServlet.class:814)\r\nApplicationFilterChain.internalDoFilter(ServletRequest,ServletResponse) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.core\\ApplicationFilterChain.class:223)\r\nApplicationFilterChain.doFilter(ServletRequest,ServletResponse) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.core\\ApplicationFilterChain.class:158)\r\nWsFilter.doFilter(ServletRequest,ServletResponse,FilterChain) (\\tomcat-embed-websocket-10.1.5.jar\\org.apache.tomcat.websocket.server\\WsFilter.class:53)\r\nApplicationFilterChain.internalDoFilter(ServletRequest,ServletResponse) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.core\\ApplicationFilterChain.class:185)\r\nApplicationFilterChain.doFilter(ServletRequest,ServletResponse) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.core\\ApplicationFilterChain.class:158)\r\nRequestContextFilter.doFilterInternal(HttpServletRequest,HttpServletResponse,FilterChain) (\\spring-web-6.0.4.jar\\org.springframework.web.filter\\RequestContextFilter.class:100)\r\nOncePerRequestFilter.doFilter(ServletRequest,ServletResponse,FilterChain) (\\spring-web-6.0.4.jar\\org.springframework.web.filter\\OncePerRequestFilter.class:116)\r\nApplicationFilterChain.internalDoFilter(ServletRequest,ServletResponse) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.core\\ApplicationFilterChain.class:185)\r\nApplicationFilterChain.doFilter(ServletRequest,ServletResponse) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.core\\ApplicationFilterChain.class:158)\r\nFormContentFilter.doFilterInternal(HttpServletRequest,HttpServletResponse,FilterChain) (\\spring-web-6.0.4.jar\\org.springframework.web.filter\\FormContentFilter.class:93)\r\nOncePerRequestFilter.doFilter(ServletRequest,ServletResponse,FilterChain) (\\spring-web-6.0.4.jar\\org.springframework.web.filter\\OncePerRequestFilter.class:116)\r\nApplicationFilterChain.internalDoFilter(ServletRequest,ServletResponse) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.core\\ApplicationFilterChain.class:185)\r\nApplicationFilterChain.doFilter(ServletRequest,ServletResponse) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.core\\ApplicationFilterChain.class:158)\r\nCharacterEncodingFilter.doFilterInternal(HttpServletRequest,HttpServletResponse,FilterChain) (\\spring-web-6.0.4.jar\\org.springframework.web.filter\\CharacterEncodingFilter.class:201)\r\nOncePerRequestFilter.doFilter(ServletRequest,ServletResponse,FilterChain) (\\spring-web-6.0.4.jar\\org.springframework.web.filter\\OncePerRequestFilter.class:116)\r\nApplicationFilterChain.internalDoFilter(ServletRequest,ServletResponse) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.core\\ApplicationFilterChain.class:185)\r\nApplicationFilterChain.doFilter(ServletRequest,ServletResponse) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.core\\ApplicationFilterChain.class:158)\r\nStandardWrapperValve.invoke(Request,Response) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.core\\StandardWrapperValve.class:177)\r\nStandardContextValve.invoke(Request,Response) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.core\\StandardContextValve.class:97)\r\nAuthenticatorBase.invoke(Request,Response) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.authenticator\\AuthenticatorBase.class:542)\r\nStandardHostValve.invoke(Request,Response) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.core\\StandardHostValve.class:119)\r\nErrorReportValve.invoke(Request,Response) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.valves\\ErrorReportValve.class:92)\r\nStandardEngineValve.invoke(Request,Response) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.core\\StandardEngineValve.class:78)\r\nCoyoteAdapter.service(Request,Response) (\\tomcat-embed-core-10.1.5.jar\\org.apache.catalina.connector\\CoyoteAdapter.class:357)\r\nHttp11Processor.service(SocketWrapperBase) (\\tomcat-embed-core-10.1.5.jar\\org.apache.coyote.http11\\Http11Processor.class:400)\r\nAbstractProcessorLight.process(SocketWrapperBase,SocketEvent) (\\tomcat-embed-core-10.1.5.jar\\org.apache.coyote\\AbstractProcessorLight.class:65)\r\nAbstractProtocol$ConnectionHandler.process(SocketWrapperBase,SocketEvent) (\\tomcat-embed-core-10.1.5.jar\\org.apache.coyote\\AbstractProtocol.class:859)\r\nNioEndpoint$SocketProcessor.doRun() (\\tomcat-embed-core-10.1.5.jar\\org.apache.tomcat.util.net\\NioEndpoint.class:1734)\r\nSocketProcessorBase.run() (\\tomcat-embed-core-10.1.5.jar\\org.apache.tomcat.util.net\\SocketProcessorBase.class:52)\r\nThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) (\\tomcat-embed-core-10.1.5.jar\\org.apache.tomcat.util.threads\\ThreadPoolExecutor.class:1191)\r\nThreadPoolExecutor$Worker.run() (\\tomcat-embed-core-10.1.5.jar\\org.apache.tomcat.util.threads\\ThreadPoolExecutor.class:659)\r\nTaskThread$WrappingRunnable.run() (\\tomcat-embed-core-10.1.5.jar\\org.apache.tomcat.util.threads\\TaskThread.class:61)\r\nThread.run() (\u4e0d\u660e\u306a\u30bd\u30fc\u30b9:-1)\r\n<\/code><\/pre>\n<p>\u6211\u4e0d\u662f\u975e\u5e38\u8ffd\u6c42\uff0c\u4f46\u53ea\u9700\u770b\u4e00\u4e0b\u6700\u540e\u4e00\u6b21\u8c03\u7528 InvocableHandlerMethod#doInvoke(Object[])\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">InvocableHandlerMethod<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">HandlerMethod<\/span> <span class=\"o\">{<\/span>\r\n    \r\n    <span class=\"c1\">\/\/ \uff08\u4e2d\u7565\uff09<\/span>\r\n    \r\n    <span class=\"cm\">\/**\r\n     * Invoke the handler method with the given argument values.\r\n     *\/<\/span>\r\n    <span class=\"nd\">@Nullable<\/span>\r\n    <span class=\"kd\">protected<\/span> <span class=\"nc\">Object<\/span> <span class=\"nf\">doInvoke<\/span><span class=\"o\">(<\/span><span class=\"nc\">Object<\/span><span class=\"o\">...<\/span> <span class=\"n\">args<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">Exception<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"nc\">Method<\/span> <span class=\"n\">method<\/span> <span class=\"o\">=<\/span> <span class=\"n\">getBridgedMethod<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"nc\">KotlinDetector<\/span><span class=\"o\">.<\/span><span class=\"na\">isSuspendingFunction<\/span><span class=\"o\">(<\/span><span class=\"n\">method<\/span><span class=\"o\">))<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"k\">return<\/span> <span class=\"nf\">invokeSuspendingFunction<\/span><span class=\"o\">(<\/span><span class=\"n\">method<\/span><span class=\"o\">,<\/span> <span class=\"n\">getBean<\/span><span class=\"o\">(),<\/span> <span class=\"n\">args<\/span><span class=\"o\">);<\/span>\r\n            <span class=\"o\">}<\/span>\r\n            <span class=\"k\">return<\/span> <span class=\"n\">method<\/span><span class=\"o\">.<\/span><span class=\"na\">invoke<\/span><span class=\"o\">(<\/span><span class=\"n\">getBean<\/span><span class=\"o\">(),<\/span> <span class=\"n\">args<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ \u2190\u3053\u3053\u304b\u3089\u547c\u3070\u308c\u3066\u3044\u308b<\/span>\r\n        <span class=\"o\">}<\/span>\r\n        <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"nc\">IllegalArgumentException<\/span> <span class=\"n\">ex<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">assertTargetBean<\/span><span class=\"o\">(<\/span><span class=\"n\">method<\/span><span class=\"o\">,<\/span> <span class=\"n\">getBean<\/span><span class=\"o\">(),<\/span> <span class=\"n\">args<\/span><span class=\"o\">);<\/span>\r\n            <span class=\"nc\">String<\/span> <span class=\"n\">text<\/span> <span class=\"o\">=<\/span> <span class=\"o\">(<\/span><span class=\"n\">ex<\/span><span class=\"o\">.<\/span><span class=\"na\">getMessage<\/span><span class=\"o\">()<\/span> <span class=\"o\">==<\/span> <span class=\"kc\">null<\/span> <span class=\"o\">||<\/span> <span class=\"n\">ex<\/span><span class=\"o\">.<\/span><span class=\"na\">getCause<\/span><span class=\"o\">()<\/span> <span class=\"k\">instanceof<\/span> <span class=\"nc\">NullPointerException<\/span><span class=\"o\">)<\/span> <span class=\"o\">?<\/span>\r\n                    <span class=\"s\">\"Illegal argument\"<\/span> <span class=\"o\">:<\/span> <span class=\"n\">ex<\/span><span class=\"o\">.<\/span><span class=\"na\">getMessage<\/span><span class=\"o\">();<\/span>\r\n            <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">IllegalStateException<\/span><span class=\"o\">(<\/span><span class=\"n\">formatInvokeError<\/span><span class=\"o\">(<\/span><span class=\"n\">text<\/span><span class=\"o\">,<\/span> <span class=\"n\">args<\/span><span class=\"o\">),<\/span> <span class=\"n\">ex<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n        <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"nc\">InvocationTargetException<\/span> <span class=\"n\">ex<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"c1\">\/\/ Unwrap for HandlerExceptionResolvers ...<\/span>\r\n            <span class=\"nc\">Throwable<\/span> <span class=\"n\">targetException<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ex<\/span><span class=\"o\">.<\/span><span class=\"na\">getCause<\/span><span class=\"o\">();<\/span>\r\n            <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">targetException<\/span> <span class=\"k\">instanceof<\/span> <span class=\"nc\">RuntimeException<\/span> <span class=\"n\">runtimeException<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"k\">throw<\/span> <span class=\"n\">runtimeException<\/span><span class=\"o\">;<\/span>\r\n            <span class=\"o\">}<\/span>\r\n            <span class=\"k\">else<\/span> <span class=\"nf\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">targetException<\/span> <span class=\"k\">instanceof<\/span> <span class=\"nc\">Error<\/span> <span class=\"n\">error<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"k\">throw<\/span> <span class=\"n\">error<\/span><span class=\"o\">;<\/span>\r\n            <span class=\"o\">}<\/span>\r\n            <span class=\"k\">else<\/span> <span class=\"nf\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">targetException<\/span> <span class=\"k\">instanceof<\/span> <span class=\"nc\">Exception<\/span> <span class=\"n\">exception<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"k\">throw<\/span> <span class=\"n\">exception<\/span><span class=\"o\">;<\/span>\r\n            <span class=\"o\">}<\/span>\r\n            <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">IllegalStateException<\/span><span class=\"o\">(<\/span><span class=\"n\">formatInvokeError<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Invocation failure\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">args<\/span><span class=\"o\">),<\/span> <span class=\"n\">targetException<\/span><span class=\"o\">);<\/span>\r\n            <span class=\"o\">}<\/span>\r\n        <span class=\"o\">}<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u4f7f\u7528\u53cd\u5c04\u53ef\u4ee5\u770b\u5230\u8c03\u7528\u4e86\u8fd9\u4e2a\u65b9\u6cd5\u3002\u4f3c\u4e4e\u4e5f\u53ef\u4ee5\u770b\u5230\u4f20\u5165\u4e86\u53c2\u6570\u3002\u6211\u60f3\uff0c\u5982\u679c\u5728URL\u4e0a\u6dfb\u52a0GET\u53c2\u6570\uff0c\u5b83\u4eec\u5e94\u8be5\u4f1a\u4f20\u9012\u5230\u8fd9\u91cc\u3002\u8ba9\u6211\u4eec\u8fdb\u4e00\u6b65\u8ffd\u6eaf\u6808\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">InvocableHandlerMethod<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">HandlerMethod<\/span> <span class=\"o\">{<\/span>\r\n   \r\n    <span class=\"c1\">\/\/ \uff08\u4e2d\u7565\uff09<\/span>\r\n    \r\n    <span class=\"nd\">@Nullable<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"nc\">Object<\/span> <span class=\"nf\">invokeForRequest<\/span><span class=\"o\">(<\/span><span class=\"nc\">NativeWebRequest<\/span> <span class=\"n\">request<\/span><span class=\"o\">,<\/span> <span class=\"nd\">@Nullable<\/span> <span class=\"nc\">ModelAndViewContainer<\/span> <span class=\"n\">mavContainer<\/span><span class=\"o\">,<\/span>\r\n            <span class=\"nc\">Object<\/span><span class=\"o\">...<\/span> <span class=\"n\">providedArgs<\/span><span class=\"o\">)<\/span> <span class=\"kd\">throws<\/span> <span class=\"nc\">Exception<\/span> <span class=\"o\">{<\/span>\r\n    \r\n        <span class=\"nc\">Object<\/span><span class=\"o\">[]<\/span> <span class=\"n\">args<\/span> <span class=\"o\">=<\/span> <span class=\"n\">getMethodArgumentValues<\/span><span class=\"o\">(<\/span><span class=\"n\">request<\/span><span class=\"o\">,<\/span> <span class=\"n\">mavContainer<\/span><span class=\"o\">,<\/span> <span class=\"n\">providedArgs<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ \u2190\u5f15\u6570\u306f\u3053\u3053\u3067\u53d6\u5f97\u3057\u3066\u3044\u308b\u3089\u3057\u3044<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">isTraceEnabled<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">trace<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Arguments: \"<\/span> <span class=\"o\">+<\/span> <span class=\"nc\">Arrays<\/span><span class=\"o\">.<\/span><span class=\"na\">toString<\/span><span class=\"o\">(<\/span><span class=\"n\">args<\/span><span class=\"o\">));<\/span>\r\n        <span class=\"o\">}<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"nf\">doInvoke<\/span><span class=\"o\">(<\/span><span class=\"n\">args<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ \u2190\u3053\u3053\u3067\u547c\u51fa\u3057<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h2>(5) \u5c1d\u8bd5\u4f20\u9012 GET \u53c2\u6570<\/h2>\n<p>\u8981\u662f\u8fd9\u6837\u7684\u8bdd\uff0c\u6211\u4eec\u8bd5\u8bd5\u770b\u5427&#8230;\u4f7f\u7528 @RequestParam \u6ce8\u89e3\u5e94\u8be5\u80fd\u591f\u83b7\u53d6\u53c2\u6570\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.anestec.hello<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.RequestMapping<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.RequestParam<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.RestController<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@RestController<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">HelloApplicationController<\/span> <span class=\"o\">{<\/span>\r\n\r\n\t<span class=\"nd\">@RequestMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"nc\">String<\/span> <span class=\"nf\">test<\/span><span class=\"o\">(<\/span><span class=\"nd\">@RequestParam<\/span><span class=\"o\">(<\/span><span class=\"s\">\"id\"<\/span><span class=\"o\">)<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">id<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span> <span class=\"c1\">\/\/ \u5f15\u6570 id \u3092\u8cb0\u3063\u3066\u307f\u308b\u3002<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"s\">\"Hello World id=[\"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">id<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\"]\"<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/97-0.png\" alt=\"Get Parameter.png\" \/><\/div>\n<pre class=\"post-pre\"><code>C:\\&gt;curl -v localhost:8080?id=12345\r\n*   Trying 127.0.0.1:8080...\r\n* Connected to localhost (127.0.0.1) port 8080 (#0)\r\n&gt; GET \/?id=12345 HTTP\/1.1\r\n&gt; Host: localhost:8080\r\n&gt; User-Agent: curl\/7.83.1\r\n&gt; Accept: *\/*\r\n&gt;\r\n* Mark bundle as not supporting multiuse\r\n&lt; HTTP\/1.1 200\r\n&lt; Content-Type: text\/plain;charset=UTF-8\r\n&lt; Content-Length: 22\r\n&lt; Date: Thu, 16 Feb 2023 07:20:16 GMT\r\n&lt;\r\nHello World id=[12345]* Connection #0 to host localhost left intact\r\n<\/code><\/pre>\n<h1>\u4e0d\u9700\u8981\u8bbe\u7f6ePOM\u5417\uff1f<\/h1>\n<p>\u8fd9\u6b21\u5b8c\u5168\u6ca1\u6709\u624b\u52a8\u4fee\u6539pom.xml\u7684\u5fc5\u8981\u3002\u4f3c\u4e4e\u5df2\u7ecf\u53cd\u6620\u4e86\u5728\u9879\u76ee\u6700\u521d\u751f\u6210\u65f6\u8bbe\u5b9a\u7684\u5185\u5bb9\u3002\u4e3a\u4e86\u786e\u8ba4\u4e00\u4e0b\u5185\u5bb9\uff0c\u51fa\u73b0\u4e86\u4ee5\u4e0b\u8fd9\u6837\u7684\u60c5\u51b5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;<\/span>\r\n<span class=\"nt\">&lt;project<\/span> <span class=\"na\">xmlns=<\/span><span class=\"s\">\"http:\/\/maven.apache.org\/POM\/4.0.0\"<\/span> <span class=\"na\">xmlns:xsi=<\/span><span class=\"s\">\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"<\/span>\r\n\t<span class=\"na\">xsi:schemaLocation=<\/span><span class=\"s\">\"http:\/\/maven.apache.org\/POM\/4.0.0 https:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\"<\/span><span class=\"nt\">&gt;<\/span>\r\n\t<span class=\"nt\">&lt;modelVersion&gt;<\/span>4.0.0<span class=\"nt\">&lt;\/modelVersion&gt;<\/span>\r\n\t<span class=\"nt\">&lt;parent&gt;<\/span>\r\n\t\t<span class=\"nt\">&lt;groupId&gt;<\/span>org.springframework.boot<span class=\"nt\">&lt;\/groupId&gt;<\/span>\r\n\t\t<span class=\"nt\">&lt;artifactId&gt;<\/span>spring-boot-starter-parent<span class=\"nt\">&lt;\/artifactId&gt;<\/span>\r\n\t\t<span class=\"nt\">&lt;version&gt;<\/span>3.0.2<span class=\"nt\">&lt;\/version&gt;<\/span>\r\n\t\t<span class=\"nt\">&lt;relativePath\/&gt;<\/span> <span class=\"c\">&lt;!-- lookup parent from repository --&gt;<\/span>\r\n\t<span class=\"nt\">&lt;\/parent&gt;<\/span>\r\n\t<span class=\"nt\">&lt;groupId&gt;<\/span>com.anestec<span class=\"nt\">&lt;\/groupId&gt;<\/span>\r\n\t<span class=\"nt\">&lt;artifactId&gt;<\/span>hello<span class=\"nt\">&lt;\/artifactId&gt;<\/span>\r\n\t<span class=\"nt\">&lt;version&gt;<\/span>0.0.1-SNAPSHOT<span class=\"nt\">&lt;\/version&gt;<\/span>\r\n\t<span class=\"nt\">&lt;name&gt;<\/span>hello<span class=\"nt\">&lt;\/name&gt;<\/span>\r\n\t<span class=\"nt\">&lt;description&gt;<\/span>Demo project for Spring Boot<span class=\"nt\">&lt;\/description&gt;<\/span>\r\n\t<span class=\"nt\">&lt;properties&gt;<\/span>\r\n\t\t<span class=\"nt\">&lt;java.version&gt;<\/span>17<span class=\"nt\">&lt;\/java.version&gt;<\/span>\r\n\t<span class=\"nt\">&lt;\/properties&gt;<\/span>\r\n\t<span class=\"nt\">&lt;dependencies&gt;<\/span>\r\n\t\t<span class=\"nt\">&lt;dependency&gt;<\/span>\r\n\t\t\t<span class=\"nt\">&lt;groupId&gt;<\/span>org.springframework.boot<span class=\"nt\">&lt;\/groupId&gt;<\/span>\r\n\t\t\t<span class=\"nt\">&lt;artifactId&gt;<\/span>spring-boot-starter-web<span class=\"nt\">&lt;\/artifactId&gt;<\/span>\r\n\t\t<span class=\"nt\">&lt;\/dependency&gt;<\/span>\r\n\r\n\t\t<span class=\"nt\">&lt;dependency&gt;<\/span>\r\n\t\t\t<span class=\"nt\">&lt;groupId&gt;<\/span>org.springframework.boot<span class=\"nt\">&lt;\/groupId&gt;<\/span>\r\n\t\t\t<span class=\"nt\">&lt;artifactId&gt;<\/span>spring-boot-starter-test<span class=\"nt\">&lt;\/artifactId&gt;<\/span>\r\n\t\t\t<span class=\"nt\">&lt;scope&gt;<\/span>test<span class=\"nt\">&lt;\/scope&gt;<\/span>\r\n\t\t<span class=\"nt\">&lt;\/dependency&gt;<\/span>\r\n\t<span class=\"nt\">&lt;\/dependencies&gt;<\/span>\r\n\r\n\t<span class=\"nt\">&lt;build&gt;<\/span>\r\n\t\t<span class=\"nt\">&lt;plugins&gt;<\/span>\r\n\t\t\t<span class=\"nt\">&lt;plugin&gt;<\/span>\r\n\t\t\t\t<span class=\"nt\">&lt;groupId&gt;<\/span>org.springframework.boot<span class=\"nt\">&lt;\/groupId&gt;<\/span>\r\n\t\t\t\t<span class=\"nt\">&lt;artifactId&gt;<\/span>spring-boot-maven-plugin<span class=\"nt\">&lt;\/artifactId&gt;<\/span>\r\n\t\t\t<span class=\"nt\">&lt;\/plugin&gt;<\/span>\r\n\t\t<span class=\"nt\">&lt;\/plugins&gt;<\/span>\r\n\t<span class=\"nt\">&lt;\/build&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;\/project&gt;<\/span>\r\n<\/code><\/pre>\n<h1>7. \u5176\u4ed6\u8981\u6ce8\u610f\u7684\u8981\u70b9\u3002<\/h1>\n<h2>(1) \u6625\u5b63\u542f\u52a8\u4eea\u8868\u76d8<\/h2>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/104-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u8fd9\u4e2a\u4fe1\u606f\u6574\u7406\u5f97\u5f88\u6e05\u6670\uff0c\u611f\u89c9\u5f88\u597d\u3002<\/p>\n<h2>(2) \u8c03\u8bd5\u671f\u95f4\u663e\u793a\u53d8\u91cf<\/h2>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/107-0.png\" alt=\"image.png\" \/><\/div>\n<h1>8. \u603b\u7ed3<\/h1>\n<p>\u6240\u4ee5\uff0c\u6211\u5011\u7e3d\u7d50\u5230\u9019\u88e1\u5c31\u597d\u4e86\u3002<\/p>\n<p>JDK17 \u4ee5\u4e0a\u3092\u3042\u3089\u304b\u3058\u3081\u5165\u308c\u3066\u7f6e\u3051\u3070\u3001VS Code + \u62e1\u5f35\u6a5f\u80fd\u3067 Spring Boot \u306e\u6700\u5c0f\u9650\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\uff08\u4eca\u56de\u306fREST API)\u306f\u307b\u307c\u3042\u3063\u3068\u3044\u3046\u9593\u306b\u4f5c\u308c\u308b\u3002<\/p>\n<p>\u5177\u4f53\u7684\u306b\u306f\u3001\u4ee5\u4e0b\u3092\u3084\u308b\u3060\u3051\u3067\u826f\u3044\u3002<\/p>\n<p>\u62e1\u5f35\u6a5f\u80fd Extension Pack for Java \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<br \/>\n\u62e1\u5f35\u6a5f\u80fd Spring Boot Extension Pack \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<br \/>\nExplorer \u306e\u300cCreate Java Project\u300d\u304b\u3089\u30d7\u30ed\u30f3\u30d7\u30c8\u306b\u5f93\u3063\u3066\u5fc5\u8981\u4e8b\u9805\u3092\u5165\u529b\u3059\u308b\u3002<br \/>\nController \u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3059\u308b\u3002<br \/>\nApplication \u30af\u30e9\u30b9\u306emain\u30e1\u30bd\u30c3\u30c9\u304b\u3089 Run\u3001\u307e\u305f\u306f Debug \u3067\u5b9f\u52b9\u3059\u308b\u3002<\/p>\n<p>VSCode \u306eSpring\u958b\u767a\u4f53\u9a13\u306f\u5168\u4f53\u7684\u306b\u3088\u304f\u6d17\u7df4\u3055\u308c\u3066\u3044\u3066\u3001Eclipse \u307f\u305f\u3044\u306b\u30b4\u30c1\u30e3\u30b4\u30c1\u30e3\u3057\u3066\u3044\u306a\u3044\uff08\u500b\u4eba\u306e\u611f\u60f3\u3067\u3059\uff09<\/p>\n<p>\u6240\u4ee5\uff0c\u6211\u5f97\u5230\u7684\u5370\u8c61\u662f\uff0c\u4f7f\u7528VSCode\u8fdb\u884cSpring\u5f00\u53d1\u5b8c\u5168\u6ca1\u6709\u95ee\u9898\u3002\u6211\u8ba4\u4e3a\u672a\u6765\u4f7f\u7528Docker\u5bb9\u5668\u548cWSL\u8fdb\u884cJava\u5f00\u53d1\u7684\u8d8b\u52bf\u4f1a\u589e\u52a0\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u6765\u770b\uff0c\u4f7f\u7528VSCode\u8fdb\u884c\u5f00\u53d1\u5c06\u6bd4Eclipse\u66f4\u6709\u4f18\u52bf\u3002\u6211\u8ba4\u4e3a\u672a\u6765\u5b83\u5c06\u6210\u4e3a\u4e3b\u6d41\u3002<\/p>\n<p>\u5982\u679c\u6709\u65f6\u95f4\u7684\u8bdd\uff0c\u6211\u4e5f\u60f3\u5c1d\u8bd5\u4f7f\u7528Thymeleaf\u8fdb\u884c\u754c\u9762\u5f00\u53d1\u3002\u975e\u5e38\u611f\u8c22\u60a8\u9605\u8bfb\u5230\u8fd9\u91cc\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. \u8fd9\u7bc7\u6587\u7ae0\u7684\u5185\u5bb9 \u7531\u4e8e\u53ef\u80fd\u8981\u5728\u5f00\u53d1\u4e1a\u52a1\u4e2d\u4f7f\u7528Spring Framework\uff0c\u6240\u4ee5\u5c1d\u8bd5\u4f7f\u7528VS Code\u800c [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-39964","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u7528Visual Studio Code\u5b66\u4e60Spring Boot\u7684\u5165\u95e8 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u7528visual-studio-code\u5b66\u4e60spring-boot\u7684\u5165\u95e8\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u7528Visual Studio Code\u5b66\u4e60Spring Boot\u7684\u5165\u95e8\" \/>\n<meta property=\"og:description\" content=\"1. \u8fd9\u7bc7\u6587\u7ae0\u7684\u5185\u5bb9 \u7531\u4e8e\u53ef\u80fd\u8981\u5728\u5f00\u53d1\u4e1a\u52a1\u4e2d\u4f7f\u7528Spring Framework\uff0c\u6240\u4ee5\u5c1d\u8bd5\u4f7f\u7528VS Code\u800c [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u7528visual-studio-code\u5b66\u4e60spring-boot\u7684\u5165\u95e8\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-16T15:33:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T23:45:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/29-0.png\" \/>\n<meta name=\"author\" content=\"\u6e05, \u5b87\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u5b87\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8visual-studio-code%e5%ad%a6%e4%b9%a0spring-boot%e7%9a%84%e5%85%a5%e9%97%a8\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8visual-studio-code%e5%ad%a6%e4%b9%a0spring-boot%e7%9a%84%e5%85%a5%e9%97%a8\/\",\"name\":\"\u7528Visual Studio Code\u5b66\u4e60Spring Boot\u7684\u5165\u95e8 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-03-16T15:33:55+00:00\",\"dateModified\":\"2024-04-29T23:45:26+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8visual-studio-code%e5%ad%a6%e4%b9%a0spring-boot%e7%9a%84%e5%85%a5%e9%97%a8\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8visual-studio-code%e5%ad%a6%e4%b9%a0spring-boot%e7%9a%84%e5%85%a5%e9%97%a8\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8visual-studio-code%e5%ad%a6%e4%b9%a0spring-boot%e7%9a%84%e5%85%a5%e9%97%a8\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u7528Visual Studio Code\u5b66\u4e60Spring Boot\u7684\u5165\u95e8\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\",\"name\":\"\u6e05, \u5b87\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u5b87\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8visual-studio-code%e5%ad%a6%e4%b9%a0spring-boot%e7%9a%84%e5%85%a5%e9%97%a8\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u7528Visual Studio Code\u5b66\u4e60Spring Boot\u7684\u5165\u95e8 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u7528visual-studio-code\u5b66\u4e60spring-boot\u7684\u5165\u95e8\/","og_locale":"zh_CN","og_type":"article","og_title":"\u7528Visual Studio Code\u5b66\u4e60Spring Boot\u7684\u5165\u95e8","og_description":"1. \u8fd9\u7bc7\u6587\u7ae0\u7684\u5185\u5bb9 \u7531\u4e8e\u53ef\u80fd\u8981\u5728\u5f00\u53d1\u4e1a\u52a1\u4e2d\u4f7f\u7528Spring Framework\uff0c\u6240\u4ee5\u5c1d\u8bd5\u4f7f\u7528VS Code\u800c [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u7528visual-studio-code\u5b66\u4e60spring-boot\u7684\u5165\u95e8\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-03-16T15:33:55+00:00","article_modified_time":"2024-04-29T23:45:26+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d3da737434c4406c88745\/29-0.png"}],"author":"\u6e05, \u5b87","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u5b87","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"8 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8visual-studio-code%e5%ad%a6%e4%b9%a0spring-boot%e7%9a%84%e5%85%a5%e9%97%a8\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8visual-studio-code%e5%ad%a6%e4%b9%a0spring-boot%e7%9a%84%e5%85%a5%e9%97%a8\/","name":"\u7528Visual Studio Code\u5b66\u4e60Spring Boot\u7684\u5165\u95e8 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-03-16T15:33:55+00:00","dateModified":"2024-04-29T23:45:26+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8visual-studio-code%e5%ad%a6%e4%b9%a0spring-boot%e7%9a%84%e5%85%a5%e9%97%a8\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8visual-studio-code%e5%ad%a6%e4%b9%a0spring-boot%e7%9a%84%e5%85%a5%e9%97%a8\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8visual-studio-code%e5%ad%a6%e4%b9%a0spring-boot%e7%9a%84%e5%85%a5%e9%97%a8\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u7528Visual Studio Code\u5b66\u4e60Spring Boot\u7684\u5165\u95e8"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e","name":"\u6e05, \u5b87","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","caption":"\u6e05, \u5b87"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8visual-studio-code%e5%ad%a6%e4%b9%a0spring-boot%e7%9a%84%e5%85%a5%e9%97%a8\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/39964","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=39964"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/39964\/revisions"}],"predecessor-version":[{"id":90612,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/39964\/revisions\/90612"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=39964"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=39964"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=39964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}