搜尋

搜尋結果

未來搭飛機可360度睇全景?
旅遊情報
環球旅人 // BJM・2015-12-23

為了觀賞機外的景色,相信不少人在乘搭飛機時都希望可以住到窗口位。一般來說由於飛機旁邊的窗口面積不算太大及角度問題,所以可以觀賞的景色十分有限,不過最近有廠商就設計出一款 SkyDeck 觀景台,並設置於機頂之上,如此一來便可從另一角度欣賞到 360 度全景景色。 據設計 SkyDeck 的航天工程公司 Windspeed Technologies 表示,這個觀景台主要是希望為 VIP 級乘客提供另類的飛行體驗。至於設計方面其實不算太複雜,整個 SkyDeck 的半圓形玻璃將會採用與戰鬥機玻璃同級的物料製成,而視乎所選擇的款式,機艙內將設有樓梯或電梯將乘客帶到 SkyDeck 之上,而觀景台內會設有 1 或 2 張可旋轉的座椅,方便乘客從不同角色欣賞機外景色。與此同時當中亦會設有 GPS 系統,能夠即時提供飛機所處的地理位置。 雖然不少人都擔心 SkyDeck 這種設計或會帶來不少問題,例如突出機頂有可能會影響到飛行情況,而且觀景台的構造亦要克服壓力、溫差、噪音及紫外線等不利因素。不過 Windspeed 表示經過多年研發之後,上述的問題大致上已完全解決,除符合應有的安全性外,SkyDeck 更特別設計較近機尾的位置,以減少風阻對飛行時所帶來的影響。此外,官方表示目前空中巴士等公司已表示對 SkyDeck 有興趣,由於改裝工程十分簡單,所以一旦收到訂單後,最快可於 18 個月內為現行的客機加設這個觀景台。 原文網址:httpwp.mep6rzjini 來源:Windspeed、Unwire.hk 編輯聲明========================= 環球旅人:BJMOfficial Website:travelblogosphere.comFacebook:httpwww.facebook.comTravelBlogosphere經版權持有人授權CyberCTM.com發表。 =========================

珠海焰火晚會將設置5個觀看區域,市民需要准備好3個流
其他
澳門生活圈・2019-09-30

珠海市慶祝新中國70華誕焰火晚會 將於2019年10月1號晚上舉行 預計人流方面較多 市民選擇自駕出行亦可能受阻 珠海慶祝 中華人民共和國成立70周年 焰火晚會 將於10月1號晚上800至830分 在拱北灣海域舉行 焰火晚會將在情侶南路 設置5個觀看區域 有關部門特別提醒 無票無證觀眾無法入場觀看,可通過電視、網絡直播進行觀看。 此外,當日中午1200至晚上1100,將有多條道路實行交通管制,開車無法進入焰火晚會現場。 持入場券和個人有效身份證件的觀眾,須搭乘公共巴士或專線巴士到達控制區,經安檢後由控制區步行進入核心區。 控制區域 其中,控制區包括昌盛路、粵海東路、聯安路、情侶南路延長段(不靠海路段)和水灣路(石花西路路口至聯安路路口段)與九洲大道以南、迎賓南路以東區域。 核心區為昌盛路交情侶南路路口至情侶南路中(恒富陽光會所)之間的整條情侶南路路段。 5個觀看區域 A區入口:昌盛路、粵海東路距情侶南路交叉口20米左右位置; B區入口:粵海東路、聯安路距情侶南路交叉口20米左右位置; C區入口:聯安路、水灣路距情侶南路交叉口20米左右位置; D區入口:水灣路距情侶南路交叉口20米左右位置; E區入口:情侶南路延長線距情侶南路交叉口20米左右位置。 5個觀看區域互不相通,必須按入場券標明的區域從對應出入口進出。10月1號下午400開始可以入場,晚上730分前進場完畢。 據各觀看區入口路段的不同情況,每個區域在安檢口往外延伸100至500米不等的位置,提前設置了票務預檢口。 進入觀看區需要3個流程 1 查驗入場券(打印好的紙質票券或電子票券截圖),進入票務預檢區。 2 查驗入場者的個人有效身份證件(身份證、護照、港澳通行證等,不包括社保卡和駕照)及入場券,核查身份是否真實有效以及ldquo;人、證、票rdquo;是否一致。 3 入場者通過安檢門,進行安全檢查。 為保障活動舉辦期間 道路交通安全暢通 現決定於2019年10月1號 實施臨時交通管制和交通組織措施 具體通告 1通管制區域和時間 2019年10月1號中午1200至晚上1100,迎賓南路(石花路口至友誼路口段)以東、石花路(情侶南路口至迎賓南路口段)以南區域道路為交通管制區(不包含迎賓南路、石花路)。 公安交警部門將根據道路和交通流量的具體情況,限制車輛進入交通管制區通行。 其中,情侶南路(昌盛路東出口至港珠澳大橋口岸人工島原施工便橋路段)、粵海東路(水灣路以東路段)、聯安路(水灣路以東路段)、水灣路(石花路口至情侶南路口段)、港珠澳大橋口岸人工島原施工便橋禁止機動車和非機動車通行。 2交通組織臨時調整措施 2019年10月1號中午1200至晚上1100,分階段實施如下交通組織調整措施: 1、前山河以東、九洲大道以南區域內所有道路禁止停車(路內收費停車泊位也臨時取消停車); 2、昌盛路拱北口岸下穿隧道西往東方向、前山大橋南側鋼便橋禁止機動車通行; 3、石花路(情侶南路口至迎賓南路口段)實施東往西單方向通行; 4、九洲港路按照逆時針方向實施單行; 5、水灣路(禦海灣花園路口至聯安路口段)實施北往南單向通行,水灣路(僑光路口至聯安路口段)實施南往北單向通行; 6、聯安路(水灣路口至蓮花路口段)東往西單行; 7、九洲大道、迎賓南路雙向外側一條車道為公交專用道,僅限公交車、大中型客車通行。 3市民出行提示 1、交通管制期間,我市中心城區特別是拱北片區交通將十分繁忙,為減少交通擁堵,建議市民朋友在交通管制期間盡量減少自駕機動車出行,或者錯峰出行,特別是盡量不要駕車前往拱北、吉大片區。 2、交通管制期間,與交通管制區相連接的道路受交通流量轉移影響,道路交通將處於飽和狀態。公安交警部門對進入交通管制區的外圍連接道路,將在外圍分梯次管控分流,建議廣大機動車駕駛員盡量提前繞行。 3、觀看焰火晚會的市民朋友,請盡量選擇乘坐公共交通工具或者步行,並提前出行,不要進入機動車道內行走。 因應10月1號晚上本澳的煙花彙演及拱北灣海域的煙花表演,警務廳及交通廳將加派人員於活動場地周邊以及東方明珠一帶執行工作,疏導人流並維持交通秩序; 同時,警方亦加強對酒後駕駛、的士違法等行為的檢控工作,確保道路的安全及公眾出行的合法權益。 市民在參與慶祝活動時 注意保管好隨身財物 並配合現場警員的指示 素材來源:珠海公安、治安警察局 圖片來源:珠海公安、攝圖網、表情包 如有侵權,請聯系我們刪除 版權屬於原作者 編輯撰寫:小嚕

長蓧攻略 - 最強鐵砲隊 VS 最強騎兵隊
走遍世界
幸村・2022-05-03

鐵砲威力雖然強大,但缺點是射擊精確率低,CP(裝填)時間過長。 簡單來說就是華而不實,只是戰場上增強單兵作戰技能的兵器。 第一代鐵砲是火繩槍,明朝年間隨葡萄牙傳教士和商人們傳到日本。所謂火繩槍,並不是像現代版步鎗,由彈匧提供子彈,而是要入火藥、加上繩引,一鎗一發發射。 一來火繩槍的準繩度低得讓人啼笑皆非,基本上八成射不中十米以外目標,後來人們發現只要在鎗腔內增加螺旋紋,子彈在發射離開槍管前得到足夠的旋轉力,即可大幅提升準繩度。 後來改良的來福槍就改善了槍管的問題,這是後話。 二來子彈裝填時間過長,由入子彈、填充火藥加繩引,瞄準。一整套動作行雲流水,絕不拖泥帶水,看看手錶,需要三十秒! 多麼致命的三十秒,戰場上瞬息萬變,足夠騎兵部隊衝上來引刀成一快,死得更快。 於是信長想到一個很聰明減低CP的方法 「三段射擊法」。 跟據『甫庵信長記』的說法,信長佈置三千鐵砲部隊分成三排輪流射擊,前排士兵發射完畢馬上後退,第二排補上繼續發射,大大將CP時間縮短至十秒一發。 三千鐵砲無間斷火力組成巨型彈幕(Bilibili~ ,對戰武田騎兵隊。 鐵砲本身自帶聲波轟炸效果,加上克服了CP過長和精確度問題(三千發總有一發射到你),織田的鐵砲隊跟本以降維打擊的力度擊潰武田軍。 第一次世界大戰之所慘烈,死亡者眾,就是因為戰爭的進步已經超越人們的認知,仍然用血肉之軀扺擋坦克和自動武器。 武田軍意識到新時代的戰術作戰已經強弩之末,調整作戰方式也無法扭轉敗局,信長終於在真正意義上擊敗強敵。 但魔王的高光時刻也到頭了,手下明智光秀終於受不了信長的詭譎狡詐。 「報!信長在本能寺註駐紮,只有百餘名守衛!」 明智光秀挑燈看劍,月黑風高殺魔王。 「敵人就在本能寺!」(「敵は本能寺にあり!」) (星期二待續)

KLOOK 福鼠迎新春優惠碼,最高減HKD168!
激安優惠
OHChance 旅遊誌・2020-01-14

下載 OHChance 手機 APP, 特價資訊直送你手!   Klook 推出新ge 優惠碼,一張單滿1688可減168(優惠碼 ldquo;LUCKY168Prime;)、滿1088減88(優惠碼 ldquo;LUCKY88Prime;),新註冊用戶仲可以享88折優惠(優惠碼 ldquo;NEWYEAR88Prime;)!推薦使用來買美國的迪士尼、環球影城,以及歐洲地區的火車票最划算(不過現在瑞士火車證也不能用code了 so sad)!另外日本的主題樂園及JR列車就不能用。 優惠碼使用方法是只需在付款時輸入即可,每個優惠碼每位用戶可用一次。產品使用時間沒有限制。  小tips:如果發現使用優惠碼時說你所在地區不能用這個優惠碼,可能是klook 誤判了你的位置,你可以嘗試:1 看看klook 的帳戶是否設定了正確的地區,注意電話號碼也需要澳門/香港地區方可使用此優惠碼;2)你的ip 可能是鄰近地區或被誤認,如果是家裡,可以重開一下上網的路由器讓它重新取一個IP,又或是手機轉用行動上網試試。  【促銷公司】Klook【折扣代碼】LUCKY168(滿1688減168)      LUCKY88(滿1088減88)      NEWYEAR88(新用戶打88折)【預訂時限】2月2日2359前使用【預訂方式】Klook APP 或網頁【預訂網址】httpsohchance.inforefklook   價錢 Sample ndash; 使用 LUCKY168 優惠碼 === 想搵平機票去玩,即上 OH!Chance!澳燦旅行資訊 httpsohchance.info 去日本旅行買咩 JR Pass好?即上 OH!Note!小燦的旅行筆記做功課 httpsohnote.info 唔知間航空公司好唔好坐?馬上 Subscribe OH Chance Youtube 睇睇佢:httpsyoutube.comcOHChanceTravel 睇埋 Facebook 專頁 httpsfb.comohchance 第一時間獲得最新旅遊資訊!

[心得] 我才剛入坑侍魂曉,它就沒落了? | 侍魂曉 購買心得
手機‧電玩
MacauYeah・2019-12-17

幾年前買了PS4以後,一直玩劇情遊戲,一直PVE,玩久了,好像就是差了點什麼 正值當時街霸五的推出,收了片二手光碟。每次不想錄攻略或有劇情負擔的遊戲時,都會拿起街霸來玩玩。 街霸五的PVP,由LV1打到現在LV30 LV與強力能力無關,只表示角色熟練度,都已經兩個半年。 遊戲會根據玩家排位實力,挑選相近排位的對手進時PVP。 雖然筆者打得久,但不代表技術有特別長進,在沒有特別練習的情況下,只是剛離開菜鳥區,進入銅牌區新手區。 托賴地,這遊戲的也真多人玩,至少我長期在菜鳥區和銅牌區,也找得到對戰。就是不少人也像筆者一樣,卡在新手區域。 侍魂曉 適逢今年暑假,侍魂曉出來了,我也買了一套回來。什麼都試試看,不想被街霸這個自虐GAME綁死其實是我打得差,哈哈 跟街霸不一樣的打擊感,正!打打PVP排位賽,也很快能連線,爽!一切從零開始,沒問題。 正正正 不是不好玩,只是單純地要忙其他事情,所以玩了幾天,就放下了。 然而,隔了幾個月,到了前幾天重開遊戲,再去連線,就完全找不到對手了。 咦,不是Switch 剛出嗎?應該有大量新手在線才對。 原來,這遊戲跟街霸不一樣,街霸有跨平台對戰,但侍魂沒有。原本玩PS4侍魂的,要升級的都升了上去,升不上的,也不玩了。 剩下我這種找不到對手的真新手。哪怕被虐菜,街霸都還可以玩,但侍魂找不到人頭,只能自己打AI的話,就失去了本意。 未完待續 想睇直播,記得訂閱我地嘅 Twitch YouTube Facebook

【2020 機場貴賓室攻略】工銀信用卡無最低簽帳要求免費 6 次
生活在我城
澳門優惠・2020-01-13

本篇介紹工銀信用卡的機場貴賓室攻略。留意返今年同上年送既次數有少少唔同! 優惠日期: 即日起至 2020 年 12 月 31 日 提提你: 貴賓廳(含餐食體驗廳)連續兩次使用須間隔24小時以上。2020年每個客戶每個自然月可使用餐食體驗廳的次數累計不超過4人次(含攜伴),每個客戶每個自然月貴賓廳及餐食體驗廳可使用攜伴次數累計不超過3人次。 憑工銀澳門發行之指定工銀信用卡新註冊「龍騰出行」貴賓廳服務,每人只限登記一次,按持卡人計算。(即不可以登記兩張用 12 點) 優惠內容: 1. 工銀 VISA Infinite 信用卡 主副卡本人無限次免費使用機場貴賓室。 攜伴免費 10 次使用機場貴賓室。 2. 工銀粵港澳灣區萬事達世界卡 主副卡各 6 次使用機場貴賓室。(可攜伴) 3. 工銀粵港澳灣區銀聯雙幣鑽石卡 主副卡各 6 次使用機場貴賓室。(可攜伴) 3. 工銀粵港澳灣區萬事達白金卡 主副卡各 6 次使用機場貴賓室。(可攜伴) 4. 工銀粵港澳灣區銀聯雙幣白金卡 主副卡各 6 次使用機場貴賓室。(可攜伴) 5. 工銀金沙時尚萬事達卡世界卡 主副卡各 6 次使用機場貴賓室。(可攜伴) 6. 工銀金沙時尚萬事達卡白金卡 主副卡各 6 次使用機場貴賓室。(可攜伴) 7. 工銀環球旅行萬事達卡白金卡 主副卡各 6 次使用機場貴賓室。(可攜伴) 8. 工銀銀聯雙幣白金卡 主副卡各 6 次使用機場貴賓室。(可攜伴) 如何使用: 已持有以上信用卡可馬上申請龍騰出行,享用機場貴賓室服務: *如客戶於 2019 年已經登記,則需要重新申請方可享有 2020 年有效之點數。 1. 進入 httpsdwz.cnxQn2plEJ 2. 輸入您的信用卡號碼 3. 輸入您的個人資料 4. 輸入信用卡相關資訊,完成卡片有效性驗證 5. 成功登記後,畫面將顯示您的龍騰卡 6. 點擊「返回」鍵,將顯示您的龍騰卡 7. 驗證完成後會收到短信及郵件(內含)連結,點擊連結會展示二維碼供使用貴賓廳時驗證使用。您亦可下載「龍騰出行App」,憑註冊龍騰卡時登記的手機號碼及短信驗證碼登錄。 未有信用卡可網上申請: httpscardstyle.icbc.com.mo#subfuncreditapply 詳情: httpsmp.weixin.qq.comstYeKK7RwCDnAXHCGEkrQ 所有優惠及條款以官方網站為公布為準。 更多澳門優惠情報、有獎活動及有獎遊戲,可瀏覽 httpslifemag.cyberctm.comzh_TWbloggerMacauJetso。

Time Out Market 里斯本的時尚文化食堂
走遍世界
行走世界記錄・2019-02-08

遊走葡萄牙里斯本的舊城區,可品嚐到各種美味的傳統美食 葡式蛋撻、馬介休、葡式海鮮飯...等,對於在澳門長大的我是最熟悉不過,因此,我所追求的也許就是一點點的與眾不同。 里貝拉傳統市場 里貝拉市場 Mercado da Ribeira原本是一所本地傳統市場,跟美食扯不上半點關係。 Time Out Market 當Time Out這個英文詞組出現在里斯本這家傳統市場時,這瞬間一切都在改變,2014年5月里斯本傳統本地市場便搖身一變成為國際知名的時尚文化食堂。 英倫風與葡韻的結合 Time Out Market是由倫敦的出版公司 超時集團 Time Out Group 一手打造,把時尚文化美食匯集於此 ,在英倫文化與葡萄牙文化的化學作用下,一個非一般的美食市場由此誕生。 傳統市場在日間營業,而時尚食堂則營業至晚上2點,吸引不少本地及遊客到來覓食。 Time Out Market就像一個大型的美食廣場,長方形的設計讓餐廳店舖整齊地環繞四周排列,中央是用餐區,一些酒吧及小食店也分散在用餐區的不同位置,整個設計讓整個市場很有生氣,氣氛熱鬧,但同時又讓人有一種舒適的感覺。 由於每一家餐廳都是精選而來,日式和泰式餐廳也有,各有各的特色,環繞市場跑了一圈,要作出決定一點也不容易,最後只能夠精選以下數款美食。 HENRIQUE SA PESSOA 24小時烤制的乳豬 有名的烤乳豬是24小時慢火烤制而成,皮脆肉質細嫩,跟平時的中式乳豬口感和味道也有不同。 GROUND BURGER 漢堡包 也許是敵不過 quot;100% BLACK ANGUS BEEFquot; 這個信心保證,這家漢堡店是採用百分百黑安格斯牛的,而且在開放廚房即時看到漢堡包的制作過程,令腳步停在這家餐廳前,跟著人潮排隊點選了一份芝士漢堡。 MANTEIGARIA 手工制葡式蛋撻 這次是小編第二次踏足里斯本,第一次來的時候跑到貝倫的葡撻元祖店品嚐過正宗的葡萄牙蛋撻,一直就認為葡撻的味道跟澳門的相若。但今次在Time Out Market發現這家名叫Manteigaria 的葡撻店非常人氣,於是決定嚐一口這家店的出品,表面灑上少許肉桂粉的葡撻,吃起來味道跟元祖的有所不同,元祖的蛋味很濃郁,但這家店的卻是牛奶的比例多一些,口味相對薄一點。 CONSERVEIRA DE LISBOA 魚罐頭老店 在Time Out Market也可以找到這家1930年開業的魚罐頭老店,罐頭上印有TRICANA傳統婦女頭像,禁不住買了多款的小罐頭作為伴手禮送給親朋好友。 非凡的葡式生活 A Vida Portuguesa 市場頂部掛著一個寫有葡萄牙語的標語 quot;A VIDA PORTUGESAquot;,小編在熱鬧的氣氛中靜靜地喝著葡萄牙傳統水果酒 quot;SANGRIAquot;,腦海中浮現出一個中文譯句 quot;非凡的葡式生活quot;。 小貼士:Time Out Market位於Cais do Sodreacute; 車站對面,在車站可轉乘渡輪到對面河岸登上著名的耶穌像,眺望425大橋的美麗河岸景色,另外步行5分鐘便可到達Bica纜車站。 地址:Av. 24 de Julho 49, 1200479 Lisboa, Portugal 到達方式:地鐵、15電車及728巴士,Cais de Sodre站 Time out Market 參考網址 httpswww.timeoutmarket.comlisboaen 更多葡萄牙遊記在行走世界記錄

臨近過年!海關叮囑千萬不要帶這些物品過澳門關口,避免受處罰!
其他
澳門生活圈・2019-01-17

臨近過年過節,相信大部分市民都會買一些綠色放在家裏,喜迎新春,有些喜歡植物的市民,想必心裏已經想好要買哪些植物,但是在本地買不到,怎麼辦? 臨近過年,海關人員可是忙起來了,市民帶東西過關口,記得先前一定要看好符不符合過關的條例。 海關人員提醒: 攜帶蘭花入境前必須申請瀕危物種證明書和准照,避免觸犯法規。 2017年9月1號,《瀕危野生動植物種國際貿易公約》開始生效。據該法例顯示,未具備證照攜帶蘭花入境可被科處澳門幣5,000至100,000罰款。 《瀕危野生動植物種國際貿易公約》Convention on International Trade in Endangered Species of Wild Fauna and Flora,簡稱CITES,又稱華盛頓公約,1973年3月3號在華盛頓簽訂,現有183個締約成員。 什麼是CITES? CITES指在透過對貿易作出監管,就公約附錄所列物種(無論活體或死體、部份或其衍生物)的進出口訂出規范,以保護野生動植物種不致因國際貿易而危害生存。 所有種類的蘭花一律禁入境! 從本月1號開始,經濟局就已聯同海關到關閘廣場向市民和旅客派發宣傳品,加大力度宣傳本澳對包括蘭花在內的瀕危物種貿易的相關規定。 ▲雲南火焰蘭 ▲拖鞋蘭 因為所有種類的蘭花已納入受《瀕危野生動植物種國際貿易公約》規范的物種。 為了進一步讓公眾了解法規內容,所以需要加大力度宣傳本澳對包括蘭花在內的瀕危物種貿易的相關規定。 部份稀有品種如兜蘭拖鞋蘭、雲南火焰蘭等,更已被禁止進行商業貿易,違例者可被科處澳門幣20萬至50萬罰金。 因為新鮮的植物攜帶病菌、病蟲概率較高,並具備繁殖能力,未經檢疫一旦入境可能成為一種威脅。 所攜帶的植物規定 所有植物必須為個人自用;每人每日只可攜帶一盆含有泥土及帶根的植物;或攜帶總重量不超過5公斤的小盆栽;或攜帶總重量不超過5公斤的鮮切花,但每一單項品種的鮮切花,重量不得超過1公斤。 攜帶植物入境,須遞交由當日花商發出有蓋印和簽名的憑據正本;並附有生產或采購花場的名稱、聯絡地址和電話、品種及數量等資料。 不帶根的植物,如鮮切花類合計重量不超過1公斤者可免檢。水仙、風信子等浸水的植物在指定的時間內可視為不帶根的植物。 如市民攜帶回澳的年花不符合根據的規定,將由民政總署扣押及處理;有關人士如欲領回被扣押的植物,須補辦正式植物進口申請手續。 16條禁止攜帶和郵寄物品 動物和制品包括:活動物狗、貓除外、生或熟肉類、鮮奶和奶酪等制品、蛋及蛋制品、燕窩罐頭裝燕窩除外、油脂皮張毛類骨角制品、動物源性飼料肥料7大類。 植物和制品包括:新鮮水果蔬菜、煙葉不含煙絲、種子苗、有機栽培介質4大類。 另外,菌種、器官組織、動植物屍體和標本、土壤、轉基因生物材料等其他檢疫物也禁止攜帶。 比較熱門的應節物品,如新鮮水果、花膠、海參、鮑魚、魚翅、肉制品等都是禁止攜帶郵寄入境的。 境外購物第一步要有法律意識,屬於禁止攜帶進境物的,無論用途和攜帶數量,都不可以攜帶入境。 5類入境行李不予放行 1、不能當場繳納進境物品稅款; 2、進出境的物品屬於許可證件管理的范圍,不能當場提交; 3、進出境的物品超出自用合理數量,按規定應當辦理貨物報關手續或其他海關手續,其尚未辦理的; 4、對進出境物品的屬性、內容存疑,需要由有關主管部門進行認定、鑒定、驗核的; 5、按規定暫不予以放行的其他行李物品。 注意攜帶現金數目 入境澳門也要注意,據規定,凡入境澳門攜帶12萬澳門幣(約人民幣99,330元)以上現金或支票等無記名可轉讓票據者應向海關申報,否則可被科處澳門幣1,000至50萬元的罰款。 免稅規定 境外購滿5,000元人民幣以內物品和在口岸進境免稅店再買3,000元以內物品都免稅。 如果境外購物未滿5,000元,則在口岸免稅店可以購買多於3,000元免稅商品,但總額不得超過8,000元。 海關配合有關執法工作,在新春高峰期間,將增派人手疏導旅客,維持通關秩序。 注:澳門各口岸入境通道已設置紅綠通道通關系統,市民若所攜物品受澳門現行法律管制,必須從紅色通道過關,同時向海關關員作出申報。 臨近過年啦,市民出入境所帶物品需謹記勿超出關口的要求,不然被攔截和罰款就不好了,無論你的貴重物品是花多大力氣或者多少錢弄回來的,但違反了關口的法規,都一律會受到處罰哦! 經濟局熱線:85972238或85972636 海關熱線:89894317 素材來源:力報、搜狐、海關 圖片來源:力報、海關、搜狗、表情包 版權屬於原作者 編輯撰寫:小嚕

Spring Boot 04 - 進入http json api 世代
科技新知
MacauYeah・2024-05-23

本節,我們將會建立一個http服務,提供json api讓程式訪問。 下戴模版 我們跟上節一樣,使用Spring Initializr Maven 下載模版,但細節筆者就不再講啦。Dependency主要選擇 Spring Web Spring Boot DevTools 下載後,可以直接運行測試,可以用指令 mvn test 或經IDE運行。Spring會至少測試下能不能成功取用預設的8080端口。 Controller 我們若要實作 http json api,需要在 spring 中加入一個類,附註為 @RestController ,那方便起見,類名我們也命名為 XXXController 吧。作為示範,我們弄一個 HomeController.java ,裏面有最常見的 http GET, POST功能。 srcmainjavaiogithubmacauyeahspringboottutorialspringbootwebapibasiccontrollerHomeController.java import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; ... other import @RestController @RequestMappingquot;apiquot; public class HomeController @GetMappingquot;someRecorduuidquot; public Map readSomeRecord@PathVariable String uuid return Map.ofquot;retquot;, quot;your uuidquot; uuid; @PostMappingquot;someRecordquot; public Map createSomeRecord@RequestBody Map requestBody HashMap ret = new HashMaprequestBody; ret.putquot;retquot;, quot;got your requestquot;; return ret; HomeController裏,完整的URL 其實為 GET httplocalhost8080apisomeRecorduuid POST httplocalhost8080apisomeRecord URL中的api之後的路徑,都是定義在 HomeController 中,而前半的8080及context path,是使用預設值。在正式環境下,可能隨時會被重新定義。但我們做本地測試,只需要驗證預設值就可以了。 我們真的運行起程式mvn clean compile springbootrun,再使用最簡測試工具進行測試。Windows的朋友,可以選擇Postman作為測試,它有圖形介面。而linux的朋友,請用curl,預設安裝都會有。下列為方便表示測試參數,筆者選用curl。 測試GET,其中1234會自動對應到spring裏的uuid。 curl httplocalhost8080apisomeRecord1234 # return quot;retquot;quot;your uuid1234quot; 測試 POST,其中的 d 參數,會對應 spring裏的 @RequestBody, H 參數則是設定 http header 的意思,我們就使用約定俗成的 json 作為 header 。 curl X POST httplocalhost8080apisomeRecord H quot;ContentType applicationjsonquot; d 'quot;requstquot;quot;did you get itquot;' # return quot;requstquot;quot;did you get itquot;,quot;retquot;quot;got your requestquot; 上面的兩個操作,都回傳了我們輸入的資訊,這代表了我們成功用spring架起了http json api,而且正常讀入資訊。 Test Case 雖然我們可以正常地架起 api,但每次開發都要 postman curl這種工具額外試一次,其實也有一些成本。而且 api 數量變大,或經多次修改後,就重複人手執行,就變得相當討厭。 面對這個問題,筆者會建議寫測試用例,即是Test Case,而且用Spring內置的@SpringBootTest來寫。 產生一個空的Test類,vscode中,最簡單可以Source Action =gt; Generate Test,然後加入這次要測試的參數。 srctestjavaiogithubmacauyeahspringboottutorialspringbootwebapibasiccontrollerHomeControllerTest.java import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.RequestBuilder; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultHandlers; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; @SpringBootTest @AutoConfigureMockMvc public class HomeControllerTest @Autowired private MockMvc mockMvc; @Test void testGetSomeRecord throws Exception RequestBuilder requestBuilder = MockMvcRequestBuilders.getquot;apisomeRecord1234quot; .contentTypeMediaType.APPLICATION_JSON; this.mockMvc.performrequestBuilder .andExpectMockMvcResultMatchers.jsonPathquot;$.retquot;.valuequot;your uuid1234quot; .andDoMockMvcResultHandlers.print; @Test void testPostSomeRecord throws Exception String request = quot;quot;quot; quot;requstquot;quot;did you get itquot; quot;quot;quot;; RequestBuilder requestBuilder = MockMvcRequestBuilders.postquot;apisomeRecordquot; .contentTypeMediaType.APPLICATION_JSON .contentrequest; this.mockMvc.performrequestBuilder .andExpectMockMvcResultMatchers.jsonPathquot;$.requstquot;.valuequot;did you get itquot; .andExpectMockMvcResultMatchers.jsonPathquot;$.retquot;.valuequot;got your requestquot; .andDoMockMvcResultHandlers.print; 最後就是執行 mvn test 或經IDE運行,應該都會得到所有測試都通過的結果。 mvn test # other test result ... INFO Tests run 2, Failures 0, Errors 0, Skipped 0, Time elapsed 0.368 s in io.github.macauyeah.springboot.tutorial.springbootwebapibasic.controller.HomeControllerTest # other test result ... 上面的程式碼很多,我們逐一來。 @SpringBootTest 寫在類的外面,代表執行這個測試類時,需要運行起整個Spring程序,當然也包括http的部份。 @AutoConfigureMockMvc 寫在類的外面,代表執行這個測試類時,可以模擬一些發向自己的 http 請求。 @Autowired private MockMvc mockMvc 寫在類的裏面,因為之前有定義了可以模擬 http 的請求,Spring在運行時為大家提供了那個所謂的模擬http client的實例。 MockMvcRequestBuilders,則是建造要測試的URL及Header參數。 MockMvcResultMatchers,則是檢查回傳的結果是否如遇期的一樣。 為何這個http client叫模擬 Mock 因為在測試用例中,可能連Controller 內部依賴組件也需要進一步模擬,這樣才能把測試目標集中在Controller裏,這也是單元測試的原意。只是本次的例子看不出模擬與否的差別。 MockMvcResultMatchers.jsonPath,這是用來檢測json的結構是否跟預期一樣。有些網路上的其他例子會簡寫成 jsonPath ,但因為vscode IDE的自動import功能比較差,筆者還是保留傳統的寫法。 如果大家覺得@SpringBootTest很難,想折衷地把其他測試方法,那麼把 postman curl好好管理起來,每次修改完程式,都完整地執行一次 postman curl ,也可以達到測試的效果。只不過大家還是要好好學會整合 postman curl,知道如何檢測json結構,什麼時候有錯,什麼時候叫測試通過,所以也要花一樣功夫來實現。 最後,大家千萬不要因為測試難寫而逃課,因為寫測試絕對地可以減輕日後重執行的工作量。除非你的程式碼即用即棄,否則都建議寫測試。測試跟寫文檔不一樣,有了測試也不能沒有文檔。好消息的是,文檔現在越來越多自動生成的工具,我們日後再找機會介紹。 Source Code spring boot web api basic