{"id":39834,"date":"2023-08-03T20:00:47","date_gmt":"2023-10-29T00:55:50","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8spring-boot%e4%bd%bf%e7%94%a8mustache%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e%e7%9a%84%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81\/"},"modified":"2024-04-30T16:49:35","modified_gmt":"2024-04-30T08:49:35","slug":"%e7%94%a8spring-boot%e4%bd%bf%e7%94%a8mustache%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e%e7%9a%84%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8spring-boot%e4%bd%bf%e7%94%a8mustache%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e%e7%9a%84%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81\/","title":{"rendered":"\u7528Spring Boot\u4f7f\u7528Mustache\u6a21\u677f\u5f15\u64ce\u7684\u793a\u4f8b\u4ee3\u7801"},"content":{"rendered":"<h2>\u6982\u8ff0<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Spring Boot \u3067 Mustache \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3092\u4f7f\u3046<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u4eca\u56de\u306e\u52d5\u4f5c\u78ba\u8a8d\u74b0\u5883: Java 14 (AdoptOpenJDK 14.0.2+12) + Spring Boot 2.3.2 + Gradle 6.5.1 + macOS Catalina<\/ul>\n<h2>\u8bf7\u63d0\u4f9b\u793a\u4f8b\u4ee3\u7801\u3002<\/h2>\n<h3>\u6e90\u4ee3\u7801\u5217\u8868 &#8211;<\/h3>\n<pre class=\"post-pre\"><code>\u251c\u2500\u2500 build.gradle\r\n\u2514\u2500\u2500 src\r\n    \u2514\u2500\u2500 main\r\n        \u251c\u2500\u2500 java\r\n        \u2502\u00a0\u00a0 \u2514\u2500\u2500 com\r\n        \u2502\u00a0\u00a0     \u2514\u2500\u2500 example\r\n        \u2502\u00a0\u00a0         \u251c\u2500\u2500 SampleController.java\r\n        \u2502\u00a0\u00a0         \u2514\u2500\u2500 SampleData.java\r\n        \u2514\u2500\u2500 resources\r\n            \u251c\u2500\u2500 application.properties\r\n            \u2514\u2500\u2500 templates\r\n                \u251c\u2500\u2500 error\r\n                \u2502\u00a0\u00a0 \u251c\u2500\u2500 4xx.html\r\n                \u2502\u00a0\u00a0 \u2514\u2500\u2500 5xx.html\r\n                \u2514\u2500\u2500 my_template.html\r\n<\/code><\/pre>\n<h3>\u5efa\u9020.gradle<\/h3>\n<p>\u9700\u8981\u5f15\u5165Spring Boot Starter Mustache\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"n\">plugins<\/span> <span class=\"o\">{<\/span>\r\n  <span class=\"n\">id<\/span> <span class=\"s1\">'org.springframework.boot'<\/span> <span class=\"n\">version<\/span> <span class=\"s1\">'2.3.2.RELEASE'<\/span>\r\n  <span class=\"n\">id<\/span> <span class=\"s1\">'io.spring.dependency-management'<\/span> <span class=\"n\">version<\/span> <span class=\"s1\">'1.0.9.RELEASE'<\/span>\r\n  <span class=\"n\">id<\/span> <span class=\"s1\">'java'<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"n\">group<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'com.example'<\/span>\r\n<span class=\"n\">version<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'0.0.1'<\/span>\r\n<span class=\"n\">sourceCompatibility<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'14'<\/span>\r\n\r\n<span class=\"n\">repositories<\/span> <span class=\"o\">{<\/span>\r\n  <span class=\"n\">mavenCentral<\/span><span class=\"o\">()<\/span>\r\n<span class=\"o\">}<\/span>\r\n\r\n<span class=\"n\">dependencies<\/span> <span class=\"o\">{<\/span>\r\n  <span class=\"n\">implementation<\/span> <span class=\"s1\">'org.springframework.boot:spring-boot-starter-mustache'<\/span>\r\n  <span class=\"n\">implementation<\/span> <span class=\"s1\">'org.springframework.boot:spring-boot-starter-web'<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5f53\u67e5\u770b spring-boot-starter-mustache-2.3.2.RELEASE.pom \u7684\u5185\u5bb9\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u770b\u5230 Spring Boot Starter Mustache \u4f7f\u7528\u4e86 Mustache \u5e93\u7684 JMustache 1.15 \u7248\u672c\u3002<\/p>\n<h3>\u4e3b\u9875\/\u4e3b\u6587\u4ef6\u5939\/\u8d44\u6e90\/application.properties<\/h3>\n<p>\u8bbe\u7f6e\u4e0e\u80e1\u5b50\uff08Mustache\uff09\u76f8\u5173\u7684\u914d\u7f6e\u3002<br \/>\n\u5728\u8fd9\u91cc\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e spring.mustache.suffix \u5c06\u6269\u5c55\u540d\u4e3ahtml\u7684\u6587\u4ef6\u4f5c\u4e3a\u6a21\u677f\u6587\u4ef6\u5904\u7406\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u6709\u52b9\u306b\u3059\u308b\u304b\u3069\u3046\u304b (\u30c7\u30d5\u30a9\u30eb\u30c8\u5024: false)\r\n<\/span><span class=\"py\">spring.mustache.cache<\/span><span class=\"p\">=<\/span><span class=\"s\">false<\/span>\r\n\r\n<span class=\"c\"># \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30a8\u30f3\u30b3\u30fc\u30c9 (\u30c7\u30d5\u30a9\u30eb\u30c8\u5024: UTF-8)\r\n<\/span><span class=\"py\">spring.mustache.charset<\/span><span class=\"p\">=<\/span><span class=\"s\">UTF-8<\/span>\r\n\r\n<span class=\"c\"># \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u540d\u306b\u9069\u7528\u3059\u308b\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9 (\u30c7\u30d5\u30a9\u30eb\u30c8\u5024: classpath:\/templates\/)\r\n<\/span><span class=\"py\">spring.mustache.prefix<\/span><span class=\"p\">=<\/span><span class=\"s\">classpath:\/templates\/<\/span>\r\n\r\n<span class=\"c\"># \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u540d\u306b\u9069\u7528\u3059\u308b\u30b5\u30d5\u30a3\u30c3\u30af\u30b9 (\u30c7\u30d5\u30a9\u30eb\u30c8\u5024: .mustache)\r\n<\/span><span class=\"py\">spring.mustache.suffix<\/span><span class=\"p\">=<\/span><span class=\"s\">.html<\/span>\r\n<\/code><\/pre>\n<p>\u53ef\u4ee5\u53c2\u8003 Spring Boot \u5e94\u7528\u7a0b\u5e8f\u5c5e\u6027\u6982\u8ff0\u2014\u6587\u6863\u7b49\u7b49\uff0c\u56e0\u4e3a\u8fd8\u6709\u5176\u4ed6\u8bbe\u7f6e\u9009\u9879\u3002<\/p>\n<h3>src\/main\/java\/com\/example\/SampleController.java \u7684\u8def\u5f84<\/h3>\n<p>\u63a7\u5236\u5668\u7c7b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.example<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.boot.SpringApplication<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.boot.autoconfigure.SpringBootApplication<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.stereotype.Controller<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.GetMapping<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.servlet.ModelAndView<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@SpringBootApplication<\/span>\r\n<span class=\"nd\">@Controller<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">SampleController<\/span> <span class=\"o\">{<\/span>\r\n\r\n  <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"nc\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">args<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"nc\">SpringApplication<\/span><span class=\"o\">.<\/span><span class=\"na\">run<\/span><span class=\"o\">(<\/span><span class=\"nc\">SampleController<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">,<\/span> <span class=\"n\">args<\/span><span class=\"o\">);<\/span>\r\n  <span class=\"o\">}<\/span>\r\n\r\n  <span class=\"nd\">@GetMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/mypage\"<\/span><span class=\"o\">)<\/span>\r\n  <span class=\"kd\">public<\/span> <span class=\"nc\">ModelAndView<\/span> <span class=\"nf\">mypage<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"nc\">SampleData<\/span> <span class=\"n\">sampleData<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">SampleData<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"nc\">ModelAndView<\/span> <span class=\"n\">mav<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">ModelAndView<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"n\">mav<\/span><span class=\"o\">.<\/span><span class=\"na\">setViewName<\/span><span class=\"o\">(<\/span><span class=\"s\">\"my_template\"<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u540d<\/span>\r\n    <span class=\"n\">mav<\/span><span class=\"o\">.<\/span><span class=\"na\">addObject<\/span><span class=\"o\">(<\/span><span class=\"s\">\"mydata\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">sampleData<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ \u30c7\u30fc\u30bf\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30bb\u30c3\u30c8<\/span>\r\n    <span class=\"k\">return<\/span> <span class=\"n\">mav<\/span><span class=\"o\">;<\/span>\r\n  <span class=\"o\">}<\/span>\r\n\r\n  <span class=\"nd\">@GetMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/myerror\"<\/span><span class=\"o\">)<\/span>\r\n  <span class=\"kd\">public<\/span> <span class=\"nc\">ModelAndView<\/span> <span class=\"nf\">myerror<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">RuntimeException<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\u30a8\u30e9\u30fc\u3092\u767a\u751f\u3055\u305b\u308b\"<\/span><span class=\"o\">);<\/span>\r\n  <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h3>src\/main\/java\/com\/example\/SampleData.java \u6e90\u6587\u4ef6\u4e2d\u7684SampleData.java<\/h3>\n<p>\u513f\u5b50\u7684\u6570\u636e\u5bf9\u8c61\u5d4c\u5165\u5230\u5c0f\u80e1\u5b50\u6a21\u677f\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.example<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.List<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.Map<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">SampleData<\/span> <span class=\"o\">{<\/span>\r\n\r\n  <span class=\"kd\">public<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">foo<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"foo\"<\/span><span class=\"o\">;<\/span>\r\n\r\n  <span class=\"kd\">public<\/span> <span class=\"nc\">String<\/span> <span class=\"nf\">getBar<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"k\">return<\/span> <span class=\"s\">\"bar\"<\/span><span class=\"o\">;<\/span>\r\n  <span class=\"o\">}<\/span>\r\n\r\n  <span class=\"kd\">public<\/span> <span class=\"nc\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">strings<\/span> <span class=\"o\">=<\/span> <span class=\"o\">{<\/span><span class=\"s\">\"S1\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"S2\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"S3\"<\/span><span class=\"o\">};<\/span>\r\n\r\n  <span class=\"kd\">public<\/span> <span class=\"nc\">List<\/span> <span class=\"n\">list<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">List<\/span><span class=\"o\">.<\/span><span class=\"na\">of<\/span><span class=\"o\">(<\/span><span class=\"s\">\"L1\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"L2\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"L3\"<\/span><span class=\"o\">);<\/span>\r\n\r\n  <span class=\"kd\">public<\/span> <span class=\"nc\">Map<\/span> <span class=\"n\">map<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">Map<\/span><span class=\"o\">.<\/span><span class=\"na\">of<\/span><span class=\"o\">(<\/span><span class=\"s\">\"key1\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"value1\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"key2\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"value2\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"key3\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"value3\"<\/span><span class=\"o\">);<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h3>src\/main\/resources\/templates\/\u6211\u7684\u6a21\u677f.html<\/h3>\n<p>\u7528\u4e8e\u663e\u793a\u6570\u636e\u5bf9\u8c61\u5185\u5bb9\u7684Mustache\u6a21\u677f\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;!DOCTYPE html&gt;<\/span>\r\n<span class=\"nt\">&lt;html&gt;<\/span>\r\n<span class=\"nt\">&lt;head&gt;<\/span>\r\n<span class=\"nt\">&lt;meta<\/span> <span class=\"na\">charset=<\/span><span class=\"s\">\"UTF-8\"<\/span><span class=\"nt\">&gt;<\/span>\r\n<span class=\"nt\">&lt;title&gt;<\/span>Title<span class=\"nt\">&lt;\/title&gt;<\/span>\r\n<span class=\"nt\">&lt;\/head&gt;<\/span>\r\n<span class=\"nt\">&lt;body&gt;<\/span>\r\n{{#mydata}}\r\nfoo: {{foo}}<span class=\"nt\">&lt;br&gt;<\/span>\r\ngetBar(): {{bar}}<span class=\"nt\">&lt;br&gt;<\/span>\r\n{{\/mydata}}\r\n<span class=\"nt\">&lt;br&gt;<\/span>\r\nstrings:<span class=\"nt\">&lt;br&gt;<\/span>\r\n{{#mydata.strings}}\r\nvalue: {{.}}<span class=\"nt\">&lt;br&gt;<\/span>\r\n{{\/mydata.strings}}\r\n<span class=\"nt\">&lt;br&gt;<\/span>\r\nlist:<span class=\"nt\">&lt;br&gt;<\/span>\r\n{{#mydata.list}}\r\nvalue: {{.}}<span class=\"nt\">&lt;br&gt;<\/span>\r\n{{\/mydata.list}}\r\n<span class=\"nt\">&lt;br&gt;<\/span>\r\nmap:<span class=\"nt\">&lt;br&gt;<\/span>\r\n{{#mydata.map}}\r\n{{key1}}, {{key2}}, {{key3}}\r\n{{\/mydata.map}}\r\n<span class=\"nt\">&lt;\/body&gt;<\/span>\r\n<span class=\"nt\">&lt;\/html&gt;<\/span>\r\n<\/code><\/pre>\n<h3>src\/main\/resources\/templates\/error\/4xx.html \u8d44\u6e90\u4e2d\u7684\u6a21\u677f\u9519\u8bef\/4xx.html<\/h3>\n<p>\u53d1\u751f4xx\u7cfb\u9519\u8bef\u65f6\u4f7f\u7528\u7684Mustache\u6a21\u677f\u6587\u4ef6\u3002<br \/>\n\u53ef\u4ee5\u6839\u636e\u9700\u8981\u5c06\u9519\u8bef\u4fe1\u606f\u7b49\u6570\u636e\u5d4c\u5165\u5176\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;!DOCTYPE html&gt;<\/span>\r\n<span class=\"nt\">&lt;html&gt;<\/span>\r\n<span class=\"nt\">&lt;head&gt;<\/span>\r\n<span class=\"nt\">&lt;meta<\/span> <span class=\"na\">charset=<\/span><span class=\"s\">\"UTF-8\"<\/span><span class=\"nt\">&gt;<\/span>\r\n<span class=\"nt\">&lt;title&gt;<\/span>4xx<span class=\"nt\">&lt;\/title&gt;<\/span>\r\n<span class=\"nt\">&lt;\/head&gt;<\/span>\r\n<span class=\"nt\">&lt;body&gt;<\/span>\r\n<span class=\"nt\">&lt;h1&gt;<\/span>4xx<span class=\"nt\">&lt;\/h1&gt;<\/span>\r\n<span class=\"nt\">&lt;div&gt;<\/span>timestamp: {{#timestamp}}{{.}}{{\/timestamp}}<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;div&gt;<\/span>status: {{#status}}{{.}}{{\/status}}<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;div&gt;<\/span>error: {{#error}}{{.}}{{\/error}}<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;div&gt;<\/span>exception: {{#exception}}{{.}}{{\/exception}}<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;div&gt;<\/span>message: {{#message}}{{.}}{{\/message}}<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;div&gt;<\/span>errors: {{#errors}}{{.}}{{\/errors}}<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;div&gt;<\/span>trace: {{#trace}}{{.}}{{\/trace}}<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;div&gt;<\/span>path: {{#path}}{{.}}{{\/path}}<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;\/body&gt;<\/span>\r\n<span class=\"nt\">&lt;\/html&gt;<\/span>\r\n<\/code><\/pre>\n<h3>src\/main\/resources\/templates\/error\/5xx.html \u8bf7\u63d0\u4f9b\u4e00\u4e2a\u4e2d\u6587\u8bd1\u672c<\/h3>\n<p>\u5728\u53d1\u751f5xx\u7cfb\u5217\u9519\u8bef\u65f6\u4f7f\u7528\u7684Mustache\u6a21\u677f\u6587\u4ef6\u3002<br \/>\n\u53ef\u4ee5\u6839\u636e\u9700\u8981\u5d4c\u5165\u9519\u8bef\u4fe1\u606f\u7b49\u6570\u636e\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;!DOCTYPE html&gt;<\/span>\r\n<span class=\"nt\">&lt;html&gt;<\/span>\r\n<span class=\"nt\">&lt;head&gt;<\/span>\r\n<span class=\"nt\">&lt;meta<\/span> <span class=\"na\">charset=<\/span><span class=\"s\">\"UTF-8\"<\/span><span class=\"nt\">&gt;<\/span>\r\n<span class=\"nt\">&lt;title&gt;<\/span>5xx<span class=\"nt\">&lt;\/title&gt;<\/span>\r\n<span class=\"nt\">&lt;\/head&gt;<\/span>\r\n<span class=\"nt\">&lt;body&gt;<\/span>\r\n<span class=\"nt\">&lt;h1&gt;<\/span>5xx<span class=\"nt\">&lt;\/h1&gt;<\/span>\r\n<span class=\"nt\">&lt;div&gt;<\/span>timestamp: {{#timestamp}}{{.}}{{\/timestamp}}<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;div&gt;<\/span>status: {{#status}}{{.}}{{\/status}}<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;div&gt;<\/span>error: {{#error}}{{.}}{{\/error}}<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;div&gt;<\/span>exception: {{#exception}}{{.}}{{\/exception}}<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;div&gt;<\/span>message: {{#message}}{{.}}{{\/message}}<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;div&gt;<\/span>errors: {{#errors}}{{.}}{{\/errors}}<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;div&gt;<\/span>trace: {{#trace}}{{.}}{{\/trace}}<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;div&gt;<\/span>path: {{#path}}{{.}}{{\/path}}<span class=\"nt\">&lt;\/div&gt;<\/span>\r\n<span class=\"nt\">&lt;\/body&gt;<\/span>\r\n<span class=\"nt\">&lt;\/html&gt;<\/span>\r\n<\/code><\/pre>\n<h2>\u8f93\u51fa\u7ed3\u679c\u793a\u4f8b<\/h2>\n<p>\u7528 curl \u8fdb\u884c\u8bbf\u95ee\u5e76\u786e\u8ba4\u54cd\u5e94\u7ed3\u679c\u3002<\/p>\n<h3>\u5f53\u5904\u4e8e\u6b63\u5e38\u72b6\u6001\u65f6<\/h3>\n<p>\u6570\u636e\u5bf9\u8c61\u88ab\u5d4c\u5165\u5230 Mustache \u6a21\u677f\u4e2d\u5e76\u8f93\u51fa\u3002<\/p>\n<pre class=\"post-pre\"><code>$ curl http:\/\/localhost:8080\/mypage\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;meta charset=\"UTF-8\"&gt;\r\n&lt;title&gt;Title&lt;\/title&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\nfoo: foo&lt;br&gt;\r\ngetBar(): bar&lt;br&gt;\r\n&lt;br&gt;\r\nstrings:&lt;br&gt;\r\nvalue: S1&lt;br&gt;\r\nvalue: S2&lt;br&gt;\r\nvalue: S3&lt;br&gt;\r\n&lt;br&gt;\r\nlist:&lt;br&gt;\r\nvalue: L1&lt;br&gt;\r\nvalue: L2&lt;br&gt;\r\nvalue: L3&lt;br&gt;\r\n&lt;br&gt;\r\nmap:&lt;br&gt;\r\nvalue1, value2, value3\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/code><\/pre>\n<h3>\u5f53\u53d1\u751f404\u9519\u8bef\u65f6<\/h3>\n<p>\u7531\u4e8e\u53d1\u751f4xx\u7cfb\u5217\u9519\u8bef\uff0c\u9519\u8bef\u4fe1\u606f\u5df2\u5d4c\u5165\u5230Mustache\u6a21\u677f\u6587\u4ef6\u4e2d\u5e76\u8f93\u51fa\u3002<\/p>\n<pre class=\"post-pre\"><code>$ curl --include -H \"accept: text\/html\" http:\/\/localhost:8080\/\r\nHTTP\/1.1 404 \r\nVary: Origin\r\nVary: Access-Control-Request-Method\r\nVary: Access-Control-Request-Headers\r\nContent-Type: text\/html;charset=UTF-8\r\nContent-Language: ja-JP\r\nContent-Length: 321\r\nDate: Fri, 07 Aug 2020 07:55:53 GMT\r\n\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;meta charset=\"UTF-8\"&gt;\r\n&lt;title&gt;4xx&lt;\/title&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n&lt;h1&gt;4xx&lt;\/h1&gt;\r\n&lt;div&gt;timestamp: Fri Aug 07 16:55:53 JST 2020&lt;\/div&gt;\r\n&lt;div&gt;status: 404&lt;\/div&gt;\r\n&lt;div&gt;error: Not Found&lt;\/div&gt;\r\n&lt;div&gt;exception: &lt;\/div&gt;\r\n&lt;div&gt;message: &lt;\/div&gt;\r\n&lt;div&gt;errors: &lt;\/div&gt;\r\n&lt;div&gt;trace: &lt;\/div&gt;\r\n&lt;div&gt;path: \/&lt;\/div&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/code><\/pre>\n<h3>\u9519\u8bef\u53d1\u751f\u65f6<\/h3>\n<p>\u5f53\u53d1\u751f 5xx \u7cfb\u9519\u8bef\u65f6\uff0cMustache \u6a21\u677f\u6587\u4ef6\u4f1a\u5c06\u9519\u8bef\u4fe1\u606f\u5d4c\u5165\u5e76\u8f93\u51fa\u3002<\/p>\n<pre class=\"post-pre\"><code>$ curl --include -H \"accept: text\/html\" http:\/\/localhost:8080\/myerror\r\nHTTP\/1.1 500 \r\nContent-Type: text\/html;charset=UTF-8\r\nContent-Language: ja-JP\r\nContent-Length: 340\r\nDate: Fri, 07 Aug 2020 07:55:47 GMT\r\nConnection: close\r\n\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;meta charset=\"UTF-8\"&gt;\r\n&lt;title&gt;5xx&lt;\/title&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n&lt;h1&gt;5xx&lt;\/h1&gt;\r\n&lt;div&gt;timestamp: Fri Aug 07 16:55:47 JST 2020&lt;\/div&gt;\r\n&lt;div&gt;status: 500&lt;\/div&gt;\r\n&lt;div&gt;error: Internal Server Error&lt;\/div&gt;\r\n&lt;div&gt;exception: &lt;\/div&gt;\r\n&lt;div&gt;message: &lt;\/div&gt;\r\n&lt;div&gt;errors: &lt;\/div&gt;\r\n&lt;div&gt;trace: &lt;\/div&gt;\r\n&lt;div&gt;path: \/myerror&lt;\/div&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/code><\/pre>\n<h2>\u8bf7\u53c2\u8003\u4ee5\u4e0b\u6587\u732e\u6765\u6e90<\/h2>\n<p>Spring Boot &#8220;Usage&#8221; Guide &#8211; Japanese Translation of Official Documentation<\/p>\n<blockquote><p>\u5982\u679c\u8981\u4f7f\u7528Mustache\u6a21\u677f\u5f15\u64ce\uff0c\u8fd8\u6709\u4e00\u4e2a\u540d\u4e3a&#8221;mustacheViewResolver&#8221;\u7684MustacheViewResolver\u53ef\u4ee5\u4f7f\u7528\u3002\u5b83\u901a\u8fc7\u5728\u89c6\u56fe\u540d\u79f0\u524d\u540e\u6dfb\u52a0\u524d\u7f00\u548c\u540e\u7f00\u6765\u67e5\u627e\u8d44\u6e90\u3002\u524d\u7f00\u662fspring.mustache.prefix\uff0c\u540e\u7f00\u662fspring.mustache.suffix\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u524d\u7f00\u548c\u540e\u7f00\u7684\u503c\u5206\u522b\u662f&#8221;classpath:\/templates\/&#8221;\u548c&#8221;.mustache&#8221;\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u63d0\u4f9b\u76f8\u540c\u540d\u79f0\u7684Bean\u6765\u8986\u76d6MustacheViewResolver\u3002<\/p><\/blockquote>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Spring Boot \u306e\u6a5f\u80fd &#8211; \u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u65e5\u672c\u8a9e\u8a33<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Spring Boot \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d7\u30ed\u30d1\u30c6\u30a3\u4e00\u89a7 &#8211; \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">spring-boot\/MustacheView.java at v2.3.2.RELEASE \u00b7 spring-projects\/spring-boot \u00b7 GitHub<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">spring-boot\/MustacheViewResolver.java at v2.3.2.RELEASE \u00b7 spring-projects\/spring-boot \u00b7 GitHub<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">spring-boot\/spring-boot-project\/spring-boot-autoconfigure\/src\/main\/java\/org\/springframework\/boot\/autoconfigure\/mustache at v2.3.2.RELEASE \u00b7 spring-projects\/spring-boot \u00b7 GitHub<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">7.2.6. \u30a8\u30e9\u30fc\u51e6\u7406 &#8211; Spring Boot \u306e\u6a5f\u80fd &#8211; \u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u65e5\u672c\u8a9e\u8a33<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">DefaultErrorAttributes (Spring Boot 2.3.2.RELEASE API)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Guide to Mustache with Spring Boot | Baeldung<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u6982\u8ff0 Spring Boot \u3067 Mustache \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3092\u4f7f\u3046 &nbsp; \u4eca\u56de\u306e\u52d5\u4f5c\u78ba\u8a8d\u74b0 [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-39834","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>\u7528Spring Boot\u4f7f\u7528Mustache\u6a21\u677f\u5f15\u64ce\u7684\u793a\u4f8b\u4ee3\u7801 - 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\/\u7528spring-boot\u4f7f\u7528mustache\u6a21\u677f\u5f15\u64ce\u7684\u793a\u4f8b\u4ee3\u7801\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u7528Spring Boot\u4f7f\u7528Mustache\u6a21\u677f\u5f15\u64ce\u7684\u793a\u4f8b\u4ee3\u7801\" \/>\n<meta property=\"og:description\" content=\"\u6982\u8ff0 Spring Boot \u3067 Mustache \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3092\u4f7f\u3046 &nbsp; \u4eca\u56de\u306e\u52d5\u4f5c\u78ba\u8a8d\u74b0 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u7528spring-boot\u4f7f\u7528mustache\u6a21\u677f\u5f15\u64ce\u7684\u793a\u4f8b\u4ee3\u7801\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-29T00:55:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T08:49:35+00:00\" \/>\n<meta name=\"author\" content=\"\u5b87, \u534e\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u5b87, \u534e\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 \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%a8spring-boot%e4%bd%bf%e7%94%a8mustache%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e%e7%9a%84%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8spring-boot%e4%bd%bf%e7%94%a8mustache%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e%e7%9a%84%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81\/\",\"name\":\"\u7528Spring Boot\u4f7f\u7528Mustache\u6a21\u677f\u5f15\u64ce\u7684\u793a\u4f8b\u4ee3\u7801 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-10-29T00:55:50+00:00\",\"dateModified\":\"2024-04-30T08:49:35+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8spring-boot%e4%bd%bf%e7%94%a8mustache%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e%e7%9a%84%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8spring-boot%e4%bd%bf%e7%94%a8mustache%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e%e7%9a%84%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8spring-boot%e4%bd%bf%e7%94%a8mustache%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e%e7%9a%84%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u7528Spring Boot\u4f7f\u7528Mustache\u6a21\u677f\u5f15\u64ce\u7684\u793a\u4f8b\u4ee3\u7801\"}]},{\"@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\/513018e4e121d3add1b7c5de8be21458\",\"name\":\"\u5b87, \u534e\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g\",\"caption\":\"\u5b87, \u534e\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yuhua\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8spring-boot%e4%bd%bf%e7%94%a8mustache%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e%e7%9a%84%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u7528Spring Boot\u4f7f\u7528Mustache\u6a21\u677f\u5f15\u64ce\u7684\u793a\u4f8b\u4ee3\u7801 - 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\/\u7528spring-boot\u4f7f\u7528mustache\u6a21\u677f\u5f15\u64ce\u7684\u793a\u4f8b\u4ee3\u7801\/","og_locale":"zh_CN","og_type":"article","og_title":"\u7528Spring Boot\u4f7f\u7528Mustache\u6a21\u677f\u5f15\u64ce\u7684\u793a\u4f8b\u4ee3\u7801","og_description":"\u6982\u8ff0 Spring Boot \u3067 Mustache \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3092\u4f7f\u3046 &nbsp; \u4eca\u56de\u306e\u52d5\u4f5c\u78ba\u8a8d\u74b0 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u7528spring-boot\u4f7f\u7528mustache\u6a21\u677f\u5f15\u64ce\u7684\u793a\u4f8b\u4ee3\u7801\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-10-29T00:55:50+00:00","article_modified_time":"2024-04-30T08:49:35+00:00","author":"\u5b87, \u534e","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u5b87, \u534e","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"5 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8spring-boot%e4%bd%bf%e7%94%a8mustache%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e%e7%9a%84%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8spring-boot%e4%bd%bf%e7%94%a8mustache%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e%e7%9a%84%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81\/","name":"\u7528Spring Boot\u4f7f\u7528Mustache\u6a21\u677f\u5f15\u64ce\u7684\u793a\u4f8b\u4ee3\u7801 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-10-29T00:55:50+00:00","dateModified":"2024-04-30T08:49:35+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8spring-boot%e4%bd%bf%e7%94%a8mustache%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e%e7%9a%84%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8spring-boot%e4%bd%bf%e7%94%a8mustache%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e%e7%9a%84%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8spring-boot%e4%bd%bf%e7%94%a8mustache%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e%e7%9a%84%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u7528Spring Boot\u4f7f\u7528Mustache\u6a21\u677f\u5f15\u64ce\u7684\u793a\u4f8b\u4ee3\u7801"}]},{"@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\/513018e4e121d3add1b7c5de8be21458","name":"\u5b87, \u534e","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g","caption":"\u5b87, \u534e"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yuhua\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e7%94%a8spring-boot%e4%bd%bf%e7%94%a8mustache%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e%e7%9a%84%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/39834","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\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=39834"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/39834\/revisions"}],"predecessor-version":[{"id":93100,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/39834\/revisions\/93100"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=39834"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=39834"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=39834"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}