{"id":15142,"date":"2024-11-27T12:36:09","date_gmt":"2024-11-27T12:36:09","guid":{"rendered":"https:\/\/onhee.com\/?p=15142"},"modified":"2024-11-27T12:36:09","modified_gmt":"2024-11-27T12:36:09","slug":"%e5%9c%a8-java-%e4%b8%ad%e6%9e%84%e5%bb%ba%e9%ab%98%e6%95%88-rest-api-%e7%9a%84%e5%9b%9b%e5%a4%a7%e5%85%b3%e9%94%ae%e6%8a%80%e5%b7%a7","status":"publish","type":"post","link":"https:\/\/onhee.com\/?p=15142","title":{"rendered":"\u5728 Java \u4e2d\u6784\u5efa\u9ad8\u6548 REST API \u7684\u56db\u5927\u5173\u952e\u6280\u5de7"},"content":{"rendered":"<p><span><\/p>\n<h2>\u63d0\u5347 Java REST API \u7684\u5173\u952e\u6280\u5de7<\/h2>\n<p>\u5728\u4f7f\u7528 Java \u521b\u5efa\u53ef\u9760\u7684 REST API \u65f6\uff0c\u4e0d\u4ec5\u9700\u8981\u5bf9 HTTP \u8bf7\u6c42\u548c\u54cd\u5e94\u6709\u57fa\u672c\u4e86\u89e3\uff0c\u8fd8\u9700\u786e\u4fdd API \u8bbe\u8ba1\u826f\u597d\u3001\u53ef\u7ef4\u62a4\u4e14\u5b89\u5168\u3002\u672c\u6587\u5c06\u63d0\u4f9b\u56db\u4e2a\u5173\u952e\u6280\u5de7\uff0c\u4ee5\u6539\u8fdb REST API\u3002\u5047\u8bbe\u5df2\u7ecf\u719f\u6089 Richardson \u6210\u719f\u5ea6\u6a21\u578b\uff0c\u5c24\u5176\u662f\u8fbe\u5230 2 \u7ea7\uff0c\u8fd9\u662f\u826f\u597d API \u7684\u6700\u4f4e\u8981\u6c42\u3002\u5982\u9700\u5feb\u901f\u4e86\u89e3\u7406\u67e5\u68ee\u6210\u719f\u5ea6\u6a21\u578b\uff0c\u5efa\u8bae\u9605\u8bfb Martin Fowler \u7684\u6587\u7ae0\u300a\u7406\u67e5\u68ee\u6210\u719f\u5ea6\u6a21\u578b\u300b\u3002<\/p>\n<p>\u5728\u4e86\u89e3\u4e0a\u8ff0\u5148\u51b3\u6761\u4ef6\u540e\uff0c\u63a5\u4e0b\u6765\u5c06\u6df1\u5165\u63a2\u8ba8\u8fd9\u4e9b\u6280\u5de7\u3002\u4e3a\u4fbf\u4e8e\u8bf4\u660e\uff0c\u4ee5\u4e0b\u793a\u4f8b\u6765\u81ea\u63a2\u9669\u9886\u57df\u3002\u5c3d\u7ba1\u4e0d\u4f1a\u8be6\u7ec6\u63a2\u8ba8\u5b9e\u4f53\u548c\u5c42\uff0c\u4f46\u5047\u8bbe\u5b58\u5728\u4ee5\u4e0b\u5b9e\u4f53\u7c7b\uff1a<\/p>\n<p><code>public&nbsp;class&nbsp;Expedition&nbsp;{<br \/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;name;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;location;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;LocalDate&nbsp;date;<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Expedition(String&nbsp;name,&nbsp;String&nbsp;location,&nbsp;LocalDate&nbsp;date)&nbsp;{<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.name&nbsp;=&nbsp;name;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.location&nbsp;=&nbsp;location;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.date&nbsp;=&nbsp;date;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getName()&nbsp;{<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;name;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getLocation()&nbsp;{<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;location;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;LocalDate&nbsp;getDate()&nbsp;{<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;date;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;}<br \/>}<\/code><\/pre>\n<h2>\u672f\u8bed\u548c\u8d44\u6e90\u547d\u540d\u7684\u4e00\u81f4\u6027<\/h2>\n<p>\u8bbe\u8ba1\u826f\u597d\u7684 REST API \u7684\u5173\u952e\u4e4b\u4e00\u662f\u786e\u4fdd\u672f\u8bed\u7684\u4e00\u81f4\u6027\uff0c\u5e76\u4ed4\u7ec6\u5173\u6ce8\u670d\u52a1\u7684\u8bcd\u6c47\u3002\u9996\u5148\u5e94\u9075\u5faa\u901a\u7528\u547d\u540d\u7ea6\u5b9a\uff0c\u7136\u540e\u518d\u5411\u66f4\u5177\u4f53\u7684\u672f\u8bed\u7ec6\u5316\u3002\u53ef\u4ee5\u501f\u52a9\u9886\u57df\u9a71\u52a8\u8bbe\u8ba1\uff08DDD\uff09\u539f\u5219\uff0c\u4ece\u4e3b\u57df\u51fa\u53d1\uff0c\u9010\u6b65\u7ec6\u5316\u5230\u5b50\u57df\u3002<\/p>\n<p>\u4e00\u4e2a\u7b80\u5355\u7684\u7ecf\u9a8c\u6cd5\u5219\u662f\u4f7f\u7528\u590d\u6570\u540d\u8bcd\u8868\u793a\u8d44\u6e90\uff0c\u4f8b\u5982\uff1a<\/p>\n<ul>\n<li>GET \/expeditions &#8211; \u8fd4\u56de\u6240\u6709\u63a2\u9669<\/li>\n<li>GET \/expeditions\/{id} &#8211; \u901a\u8fc7 ID \u68c0\u7d22\u7279\u5b9a\u63a2\u9669<\/li>\n<\/ul>\n<p>\u793a\u4f8b\u4ee3\u7801\uff1a<\/p>\n<p><code>@Path(\"expeditions\")<br \/>public&nbsp;class&nbsp;ExpeditionResource&nbsp;{<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;@GET<br \/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;List&lt;Expedition&gt;&nbsp;list()&nbsp;{<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5b9e\u73b0\u4ee3\u7801<br \/>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;@GET<br \/>&nbsp;&nbsp;&nbsp;&nbsp;@Path(\"\/{id}\")<br \/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Expedition&nbsp;get(@PathParam(\"id\")&nbsp;String&nbsp;id)&nbsp;{<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5b9e\u73b0\u4ee3\u7801<br \/>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;@GET<br \/>&nbsp;&nbsp;&nbsp;&nbsp;@Path(\"\/search\")<br \/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;List&lt;Expedition&gt;&nbsp;mine()&nbsp;{<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5b9e\u73b0\u4ee3\u7801<br \/>&nbsp;&nbsp;&nbsp;&nbsp;}<br \/>}<\/code><\/pre>\n<p>\u6709\u5173\u4fdd\u6301\u4e00\u81f4\u6027\u7684\u66f4\u8be6\u7ec6\u6307\u5357\uff0c\u8bf7\u53c2\u8003\u300aREST API \u8bbe\u8ba1\u89c4\u5219\u624b\u518c\u300b\u3002<\/p>\n<h2>\u53ef\u7ef4\u62a4\u6027\u3001\u53ef\u6269\u5c55\u6027\u548c\u6587\u6863<\/h2>\n<p>\u968f\u7740 API \u7684\u590d\u6742\u6027\u4e0d\u65ad\u589e\u52a0\uff0c\u7ef4\u62a4\u548c\u6269\u5c55\u53d8\u5f97\u81f3\u5173\u91cd\u8981\u3002\u786e\u4fdd\u53ef\u7ef4\u62a4\u6027\u7684\u4e00\u79cd\u6709\u6548\u65b9\u5f0f\u662f\u63d0\u4f9b\u9002\u5f53\u7684\u6587\u6863\u3002\u5c3d\u7ba1\u6587\u6863\u53ef\u80fd\u4e0d\u662f\u8bb8\u591a\u5f00\u53d1\u4eba\u5458\u6700\u559c\u6b22\u7684\u4efb\u52a1\uff0c\u4f46\u5b83\u662f\u4e0d\u53ef\u6216\u7f3a\u7684\u3002OpenAPI \u662f\u4e00\u4e2a\u4f18\u79c0\u7684\u5de5\u5177\uff0c\u80fd\u591f\u81ea\u52a8\u751f\u6210\u548c\u589e\u5f3a\u6587\u6863\u3002\u6b32\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u8bbf\u95ee OpenAPI\u3002<\/p>\n<p>\u53e6\u4e00\u4e2a\u5173\u952e\u65b9\u9762\u662f\u7248\u672c\u63a7\u5236\u3002\u7248\u672c\u63a7\u5236\u53ef\u4ee5\u786e\u4fdd\u5411\u540e\u517c\u5bb9\u6027\uff0c\u5e76\u5b9e\u73b0\u4e0d\u540c API \u7248\u672c\u4e4b\u95f4\u7684\u5e73\u6ed1\u8fc7\u6e21\u3002\u5b83\u5141\u8bb8\u540c\u65f6\u652f\u6301\u65b0\u65e7\u7248\u672c\uff0c\u4ece\u800c\u9f13\u52b1\u7528\u6237\u5728\u65b9\u4fbf\u65f6\u8fc1\u79fb\u5230\u6700\u65b0\u7248\u672c\u3002\u5728 Java \u4e2d\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e3a\u6bcf\u4e2a\u7248\u672c\u4f7f\u7528\u5355\u72ec\u7684\u5305\u6784\u5efa\u4ee3\u7801\uff0c\u5e76\u521b\u5efa\u9002\u914d\u5668\u5c42\u6765\u7ba1\u7406\u7248\u672c\u4e4b\u95f4\u7684\u4ea4\u4e92\uff0c\u6765\u5b9e\u73b0\u8fd9\u4e00\u70b9\u3002<\/p>\n<p>\u793a\u4f8b\uff1a<\/p>\n<p><code>package&nbsp;os.expert.demo.expeditions.v1;<\/p>\n<p>@Path(\"\/api\/v1\/expeditions\")<br \/>public&nbsp;class&nbsp;ExpeditionResource&nbsp;{<br \/>&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5b9e\u73b0\u4ee3\u7801<br \/>}<\/p>\n<p>package&nbsp;os.expert.demo.expeditions.v2;<\/p>\n<p>@Path(\"\/api\/v2\/expeditions\")<br \/>public&nbsp;class&nbsp;ExpeditionResource&nbsp;{<br \/>&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5b9e\u73b0\u4ee3\u7801<br \/>}<\/code><\/pre>\n<h2>\u5b89\u5168\u6027\uff1a\u6c38\u8fdc\u4e0d\u8981\u4fe1\u4efb\u7528\u6237<\/h2>\n<p>\u5b89\u5168\u6027\u662f\u4efb\u4f55 API \u7684\u57fa\u672c\u7ec4\u6210\u90e8\u5206\u3002\u4e00\u822c\u539f\u5219\u662f\u6c38\u8fdc\u4e0d\u8981\u4fe1\u4efb\u7528\u6237\uff1b\u59cb\u7ec8\u9a8c\u8bc1\u5176\u8bbf\u95ee\u6240\u8bf7\u6c42\u8d44\u6e90\u7684\u6743\u9650\u3002\u91c7\u7528\u8eab\u4efd\u9a8c\u8bc1\u7684\u65b9\u6cd5\uff0c\u53ef\u4ee5\u786e\u5b9a\u7528\u6237\u53ef\u4ee5\u8bbf\u95ee\u54ea\u4e9b\u63a2\u9669\uff0c\u800c\u65e0\u9700\u4f9d\u8d56\u7528\u6237\u63d0\u4f9b\u7684 ID\u3002<\/p>\n<p>\u793a\u4f8b\uff1a<\/p>\n<p><code>@GET<br \/>@Path(\"\/my-expeditions\")<br \/>public&nbsp;List&lt;Expedition&gt;&nbsp;myExpeditions()&nbsp;{<br \/>&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u7528\u6237\u5df2\u901a\u8fc7\u8eab\u4efd\u9a8c\u8bc1\uff0c\u65e0\u9700\u8bf7\u6c42&nbsp;ID<br \/>&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5b9e\u73b0\u4ee3\u7801<br \/>}<\/code><\/pre>\n<p>\u8fd9\u4e00\u539f\u5219\u540c\u6837\u9002\u7528\u4e8e\u7f16\u8f91\u6216\u5220\u9664\u8d44\u6e90\u7b49\u5176\u4ed6\u64cd\u4f5c\u3002\u5728\u7ee7\u7eed\u6267\u884c\u4e4b\u524d\uff0c\u52a1\u5fc5\u9a8c\u8bc1\u6743\u9650\u3002<\/p>\n<h2>\u5f02\u5e38\u5904\u7406\u4e0e\u6b63\u786e\u7684 HTTP \u72b6\u6001\u4ee3\u7801<\/h2>\n<p>\u8bbe\u8ba1\u826f\u597d\u7684 API \u5e94\u5177\u5907\u5f3a\u5927\u7684\u5f02\u5e38\u5904\u7406\u673a\u5236\uff0c\u5c06\u9519\u8bef\u6620\u5c04\u5230\u6b63\u786e\u7684 HTTP \u72b6\u6001\u4ee3\u7801\u3002\u4f8b\u5982\uff0c\u5982\u679c\u672a\u627e\u5230\u63a2\u9669\uff0cAPI \u5e94\u8fd4\u56de 404 Not Found \u72b6\u6001\uff0c\u4ee5\u786e\u4fdd Java \u4ee3\u7801\u4e0e REST API \u8bed\u4e49\u4e4b\u95f4\u7684\u4e00\u81f4\u6027\u3002<\/p>\n<p>\u793a\u4f8b\uff1a<\/p>\n<p><code>@Provider<br \/>public&nbsp;class&nbsp;ExpeditionNotFoundExceptionMapper&nbsp;implements&nbsp;ExceptionMapper&lt;ExpeditionNotFoundException&gt;&nbsp;{<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;@Override<br \/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Response&nbsp;toResponse(ExpeditionNotFoundException&nbsp;exception)&nbsp;{<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Response.status(Response.Status.NOT_FOUND)<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.entity(exception.getMessage())<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.build();<br \/>&nbsp;&nbsp;&nbsp;&nbsp;}<br \/>}<\/code><\/pre>\n<h2>\u7ed3\u8bba<\/h2>\n<p>\u603b\u4e4b\uff0c\u521b\u5efa\u53ef\u9760\u7684 REST API \u6d89\u53ca\u51e0\u4e2a\u5173\u952e\u6b65\u9aa4\uff1a<\/p>\n<ol>\n<li><strong>\u4e86\u89e3\u57fa\u7840\u77e5\u8bc6<\/strong>\uff1a\u719f\u6089\u7406\u67e5\u68ee\u6210\u719f\u5ea6\u6a21\u578b\u3002<\/li>\n<li><strong>\u4f7f\u7528\u4e00\u81f4\u7684\u672f\u8bed<\/strong>\uff1a\u9075\u5faa\u6e05\u6670\u4e00\u81f4\u7684\u8d44\u6e90\u547d\u540d\u7ea6\u5b9a\u3002<\/li>\n<li><strong>\u5173\u6ce8\u53ef\u7ef4\u62a4\u6027\u548c\u6587\u6863<\/strong>\uff1a\u4f7f\u7528 OpenAPI \u7b49\u5de5\u5177\u5b9e\u65bd\u7248\u672c\u63a7\u5236\u5e76\u751f\u6210\u6587\u6863\u3002<\/li>\n<li><strong>\u4f18\u5148\u8003\u8651\u5b89\u5168\u6027<\/strong>\uff1a\u59cb\u7ec8\u9a8c\u8bc1\u7528\u6237\u6743\u9650\u3002<\/li>\n<li><strong>\u5b9e\u65bd\u6b63\u786e\u7684\u5f02\u5e38\u5904\u7406<\/strong>\uff1a\u786e\u4fdd API \u8fd4\u56de\u9002\u5f53\u7684 HTTP \u72b6\u6001\u4ee3\u7801\u3002<\/li>\n<\/ol>\n<p>\u901a\u8fc7\u9075\u5faa\u8fd9\u4e9b\u6280\u5de7\uff0c\u80fd\u591f\u987a\u5229\u5730\u4f7f\u7528 Java \u5f00\u53d1\u53ef\u9760\u4e14\u53ef\u7ef4\u62a4\u7684 REST API\uff0c\u5373\u4f7f\u662f\u7ecf\u9a8c\u4e30\u5bcc\u7684\u5f00\u53d1\u4eba\u5458\u4e5f\u53ef\u80fd\u9762\u4e34\u8fd9\u4e00\u6311\u6218\u3002<\/p>\n<p>\u539f\u6587\u94fe\u63a5\uff1aFour Essential Tips for Building a Robust REST API in Java<\/p>\n<p><\/span><\/p>\n<div style=\"padding: 10px 0\">\n<p>Keyword: <a href=\"https:\/\/www.explinks.com\/api\/scd2024053062131a1c66e3\">ip\u5f52\u5c5e\u5730\u67e5\u8be2<\/a><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u63d0\u5347 Java REST API \u7684\u5173\u952e\u6280\u5de7 \u5728\u4f7f\u7528 Java \u521b\u5efa\u53ef\u9760\u7684 REST API \u65f6\uff0c\u4e0d\u4ec5\u9700\u8981\u5bf9 HTTP \u8bf7\u6c42\u548c\u54cd\u5e94\u6709\u57fa\u672c\u4e86\u89e3\uff0c\u8fd8\u9700\u786e\u4fdd API \u8bbe\u8ba1\u826f\u597d\u3001\u53ef\u7ef4\u62a4\u4e14\u5b89\u5168\u3002\u672c\u6587\u5c06\u63d0\u4f9b\u56db\u4e2a\u5173\u952e\u6280\u5de7\uff0c\u4ee5\u6539\u8fdb REST API\u3002\u5047\u8bbe\u5df2\u7ecf\u719f\u6089 Richardson \u6210\u719f\u5ea6\u6a21\u578b\uff0c\u5c24\u5176\u662f\u8fbe\u5230 2 \u7ea7\uff0c\u8fd9\u662f\u826f\u597d API \u7684\u6700\u4f4e\u8981\u6c42\u3002\u5982\u9700\u5feb\u901f\u4e86\u89e3\u7406\u67e5\u68ee\u6210\u719f\u5ea6\u6a21\u578b\uff0c\u5efa\u8bae\u9605\u8bfb Martin Fowler \u7684\u6587\u7ae0\u300a\u7406\u67e5\u68ee\u6210\u719f\u5ea6\u6a21\u578b\u300b\u3002 \u5728\u4e86\u89e3\u4e0a\u8ff0\u5148\u51b3\u6761\u4ef6\u540e\uff0c\u63a5\u4e0b\u6765\u5c06\u6df1\u5165\u63a2\u8ba8\u8fd9\u4e9b\u6280\u5de7\u3002\u4e3a\u4fbf\u4e8e\u8bf4\u660e\uff0c\u4ee5\u4e0b\u793a\u4f8b\u6765\u81ea\u63a2\u9669\u9886\u57df\u3002\u5c3d\u7ba1\u4e0d\u4f1a\u8be6\u7ec6\u63a2\u8ba8\u5b9e\u4f53\u548c\u5c42\uff0c\u4f46\u5047\u8bbe\u5b58\u5728\u4ee5\u4e0b\u5b9e\u4f53\u7c7b\uff1a public&nbsp;class&nbsp;Expedition&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;name;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;location;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;LocalDate&nbsp;date; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Expedition(String&nbsp;name,&nbsp;String&nbsp;location,&nbsp;LocalDate&nbsp;date)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.name&nbsp;=&nbsp;name;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.location&nbsp;=&nbsp;location;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.date&nbsp;=&nbsp;date;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getName()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;name;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getLocation()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;location;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;LocalDate&nbsp;getDate()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;date;&nbsp;&nbsp;&nbsp;&nbsp;}} \u672f\u8bed\u548c\u8d44\u6e90\u547d\u540d\u7684\u4e00\u81f4\u6027 \u8bbe\u8ba1\u826f\u597d\u7684 REST API \u7684\u5173\u952e\u4e4b\u4e00\u662f\u786e\u4fdd\u672f\u8bed\u7684\u4e00\u81f4\u6027\uff0c\u5e76\u4ed4\u7ec6\u5173\u6ce8\u670d\u52a1\u7684\u8bcd\u6c47\u3002\u9996\u5148\u5e94\u9075\u5faa\u901a\u7528\u547d\u540d\u7ea6\u5b9a\uff0c\u7136\u540e\u518d\u5411\u66f4\u5177\u4f53\u7684\u672f\u8bed\u7ec6\u5316\u3002\u53ef\u4ee5\u501f\u52a9\u9886\u57df\u9a71\u52a8\u8bbe\u8ba1\uff08DDD\uff09\u539f\u5219\uff0c\u4ece\u4e3b\u57df\u51fa\u53d1\uff0c\u9010\u6b65\u7ec6\u5316\u5230\u5b50\u57df\u3002 \u4e00\u4e2a\u7b80\u5355\u7684\u7ecf\u9a8c\u6cd5\u5219\u662f\u4f7f\u7528\u590d\u6570\u540d\u8bcd\u8868\u793a\u8d44\u6e90\uff0c\u4f8b\u5982\uff1a GET \/expeditions &#8211; \u8fd4\u56de\u6240\u6709\u63a2\u9669 GET \/expeditions\/{id} &#8211; \u901a\u8fc7 ID \u68c0\u7d22\u7279\u5b9a\u63a2\u9669 \u793a\u4f8b\u4ee3\u7801\uff1a @Path(&#8220;expeditions&#8221;)public&nbsp;class&nbsp;ExpeditionResource&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@GET&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;List&lt;Expedition&gt;&nbsp;list()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5b9e\u73b0\u4ee3\u7801&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@GET&nbsp;&nbsp;&nbsp;&nbsp;@Path(&#8220;\/{id}&#8221;)&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Expedition&nbsp;get(@PathParam(&#8220;id&#8221;)&nbsp;String&nbsp;id)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5b9e\u73b0\u4ee3\u7801&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@GET&nbsp;&nbsp;&nbsp;&nbsp;@Path(&#8220;\/search&#8221;)&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;List&lt;Expedition&gt;&nbsp;mine()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u5b9e\u73b0\u4ee3\u7801&nbsp;&nbsp;&nbsp;&nbsp;}} \u6709\u5173\u4fdd\u6301\u4e00\u81f4\u6027\u7684\u66f4\u8be6\u7ec6\u6307\u5357\uff0c\u8bf7\u53c2\u8003\u300aREST API &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/onhee.com\/?p=15142\" class=\"more-link\">Read more<span class=\"screen-reader-text\"> &#8220;\u5728 Java \u4e2d\u6784\u5efa\u9ad8\u6548 REST API \u7684\u56db\u5927\u5173\u952e\u6280\u5de7&#8221;<\/span><\/a><\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-15142","post","type-post","status-publish","format-standard","hentry","category-news"],"_links":{"self":[{"href":"https:\/\/onhee.com\/index.php?rest_route=\/wp\/v2\/posts\/15142","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/onhee.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/onhee.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/onhee.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=15142"}],"version-history":[{"count":0,"href":"https:\/\/onhee.com\/index.php?rest_route=\/wp\/v2\/posts\/15142\/revisions"}],"wp:attachment":[{"href":"https:\/\/onhee.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/onhee.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15142"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/onhee.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}