搜尋

搜尋結果

讓人忍不住一看再看的音樂劇 ~ 喝彩
文化創意
蘇蘇・2015-04-05

蘇蘇愛音樂、愛舞台劇,已經是眾所周知的事,Leslie 張國榮以及Danny 陳百強的金曲更是我讀書時期的重要回憶之一,好像『風再起時』、『由零開始』、『有誰共嗚』、『戀愛預告』、『畫出彩虹』、『一生何求』等等等等好歌,真是百聽不厭 其實如果真的要將他們的金曲數下去,不知道何時才數完hellip; 說起他們,除了金曲,還有Leslie 的不覊、Danny的書卷氣讓蘇蘇甚為懷念,雖然他們已經生活在另一國度,不過他們留下來的金曲卻永遠長存在蘇蘇的腦海之中 為什麼蘇蘇會提起他們又提起舞台劇呢 以Leslie 張國榮、Danny 陳百強和Pual 鍾保羅的故事作為藍本,在各地巡迴演出超過100場的音樂劇《喝彩》,將於4月1719日再一次在馬來西亞吉隆坡載譽重演,身在澳門的蘇蘇很羨慕吉隆坡的朋友。。。 《喝彩》雖非完全寫實,但靈感來源於張國榮、陳百強與鍾保羅的奮鬥歷程。劇團希望通過這部音樂劇回放一代巨星從冉冉升起、如日中天到瞬間幻滅的經歷,鼓勵當下的年輕人正確面對人生的挫折。《喝彩》最早在香港首演時,很多歌迷都懷疑它是否會抹黑偶像的形象,但看完後很多人流淚了。因為這齣戲不但沒有醜化他們,而是通過藝術再創造令觀眾無限緬懷他們心中的偶像。劇中貫穿44首張國榮及陳百強的經典金曲,很多歌曲都有故事,用複雜的情感去打動人,跟單純的聽舊歌不同。 這一齣是講述現代年輕人的音樂劇,絕對不是模仿秀。 記得《喝彩》去年在香港重演之後,蘇蘇曾問過飾演Leslie 一角的黃嘉威 馬來西亞舞台劇《老厝》男主角,如何演活Leslie 這角色 嘉威說在每次演出前都會做一點功課,他慶幸曾有機會跟張國榮一位舊工作拍擋了解到他的思路;他對這個世界的看法,根據這些代入其中去演活張國榮的精神,而不是刻意的去模仿,這樣才是演員應有的態度 而值得一提的是劇中穿插的44首張國榮和陳百強的經典金曲,全部都是由各演員現場演繹,單是這一點就已經值得鼓掌。 馬來西亞制作單位 ehouse 的程嘉敏表示與高志森導演多次合作無間,這次依然感到十分榮幸能把音樂劇《喝彩》再次帶到馬來西亞,《喝彩》是一個十分勵志以及懷緬一代巨星的音樂劇,在懷緬及重溫巨星們經典金曲的同時,希望為馬來西亞的朋友帶來更多正面積極的能量,亦希望通過這次的交流合作,除了把香港的演出帶進馬來西亞,更大的期望是把馬來西亞的演出,演員帶到國外其他地方,讓更多人認識! 《喝彩》演出約一小時四十分,不設中場休息 ,是次載譽重演,特別首次為吉隆坡觀眾加入《迷你演唱會》環節,值得一提是這次重演特別邀請馬來西亞演員狄妃參與演出,《喝彩》在香港丶澳門丶中國內地有部份版本是有舞者加入演出的,但這個處理未在馬來西亞出現過,這次馬來西亞演員狄妃的參與,讓《喝彩》給吉隆坡觀眾新的觀感,也是馬來西亞藝人與香港舞台劇表演者一次重要的藝術交流,拼發火花的機會,希望這是馬港兩地舞台藝人同台合作的好開始。 音樂劇 lt;喝彩gt; 馬來西亞載譽重演預告片 httpswww.youtube.comwatchv=zbB1fRysouUamp;list=UUqCI87sNwPkjIKubrDi3arA

澳門男子醉酒發生“獸性”行為!強奸6歲自家女兒!
其他
澳門生活圈・2019-07-01

傳聞道,爸爸曾是女兒上輩子的情人,對於爸爸來說,有女兒事件多麼幸福的事情。 然而,一名本地男子卻做出了讓人不敢相信的事情,強奸了一名6歲的女兒,獸性行為簡直令人痛恨... 日前,本地一名父親涉嫌在黑沙環馬路的住所內強奸自己僅6歲的親生女兒。 事件發生後,女兒上學前去洗手間時感到痛楚,於是向母親說出了父親的獸行,事件才得以揭曉;母親大驚之下,等待女兒放學後一同到警局報案。 獸父聞訊實時著草回內地,再入境時被警方拘捕,最終承認因酒後一時失去理智犯案。 司警透露,案中被捕男子姓洪,33歲,無業,涉嫌觸犯加重情節的強奸罪(因受害人為兒童),現時已被移送檢察院作出起訴。 至於案中受害人為一名6歲的女學生,事件已通報社工局及教青局作出跟進。 同樣是6歲的女童,在上個月的時候,也同樣遭到如此經曆,不過作案人並不是家人,而是一名清潔工。 上個月,一名6歲女童自行放學回到沙梨頭南街住所大堂時,突然要上廁所,然後便到管理處大堂借廁所; 豈料突然在大堂工作的一名55歲內地清潔工趁四周無人,偷偷推開廁所門,強行用手指和口侵犯女童。 至上月30日,女童把事件告訴家長,才揭發事件,家長帶同女童報案,司警在同日拘捕禽獸清潔工。 該名清潔工姓梁,男性,55歲。由2017年3月起在該大廈從事清潔工作。司警以強奸罪及加重情節,已移送檢察院處理。 看到以上事件後 你們是怎麼想的 對於作出這種行為的人 已經是不可原諒的地步了 同時,家長也需多留意自家兒童 材來源:力報、網絡 圖片來源:力報、表情包 如有侵權,請聯系我們刪除 版權屬於原作者 編輯撰寫:小嚕

《#TWINS#LOL#世界巡迴演唱會#澳門站》於11月26日舉行
音樂聯合國
LifeMag Editor・2016-10-12

由蔡卓妍、鍾欣潼組成的香港樂壇最受歡迎女子組合Twins將於2016年11月26日在澳門威尼斯人reg;金光綜藝館帶來最新的動感演唱會《#TWINS#LOL#世界巡迴演唱會#澳門站》。門票由10月12日(星期三)起透過各大金光票務售票處公開發售。 《#TWINS#LOL#世界巡迴演唱會》是她們目前為止最讓觀眾期待的演唱會。是次全新舞台設計特別為澳門觀眾而設,與香港及內地巡演完全不同,catwalk 舞台將延長伸展,讓一眾歌迷可與魅力十足的TWINS零距離接觸。演唱會則以正能量、狂歡派對以及網上流行用語「LOL」為主題,務求讓每位入場觀眾都放聲大笑「Laugh Out Loud」。此外,出道15年的Twins將會為歌迷帶來一連串的新舊作品,當中包括近期大熱的「不愛之恩」和 林俊傑JJ為她們作曲的國語新歌「就說我們都是華麗的單身族」。 《#TWINS#LOL#世界巡迴演唱會》首場演出早於上年底在香港盛大舉行。演唱會反應無比熱烈,門票一開售便迅速售罄。隨後,她們亦巡唱到廣州、深圳、佛山及上海,這次終於不負眾望來到澳門威尼斯人為期待以久歌迷的開唱。這次澳門巡演,剛好是二人出道的第50場演唱會,意義重大,Twins 到時定必與歌迷們慶祝一番 ! 演唱會及門票詳情: 票價 澳門幣 港幣1,280元(VIP區) 澳門幣 港幣880元 (A區) 澳門幣 港幣680元 (B區) 澳門幣 港幣480元 (C區) 澳門幣 港幣380元 (D區) 船票套票 觀眾可另加澳門幣港幣108元購買包括金光飛航往返港澳雙程船票的套票 售票處 金光票務 網上訂購:www.cotaiticketing.com 售票處: o 澳門巴黎人 ndash; 一樓正門大堂售票處及五樓巴黎人劇場售票處 o 澳門威尼斯人 ndash; 金光綜藝館及酒店正門大堂售票處 o 澳門四季酒店 ndash; 百利宮trade;售票處 o 澳門金沙reg; ndash; 一樓售票處 o 金沙城中心 ndash; 喜來登酒店正門及假日酒店正門售票處 電話訂購: o 澳門熱線:853 2882 8818 o 香港熱線:852 6333 6660 o 中國內地免費熱線:4001 206 618 香港快達票(將額外收取每張門票的顧客服務費) 網上訂購:www.HKTicketing.com 電話訂購:852 3128 8288 澳門廣星傳訊 網上訂購:www.macauticket.com 門市據點資料請瀏覽:www.macauticket.comTicketWebServiceStations.aspx 電話訂購:853 2855 5555

一張圖學懂買泰國樓
其他
股市操盤手眼中的泰國樓賺錢機會・2018-04-10

一張圖學懂買泰國樓 這是泰國BTS的地圖,計劃要買泰國樓,就最好留著它,肯定會有用處 若你不是常去泰國,又或雖然常去泰國而又根本只記得那裏是BIG C、那裏是四面佛等等,曼谷那個地鐵站叫什麼根本不會太記得的話,請望望這張圖,圖中的1、2及3之外,其餘地點的樓盤,除非可以十分鐘之內步行到BTS,否則其實很難找租客的。 買泰國樓前,首先你要明白你的目的,而且要清楚知道你願意投入的資金有多少。任何的投資也是一個機率遊戲,沒有百份百確定的事情,你做要的便是選機率高的一邊。 若然目的是投資,買泰國樓自然希望賺錢,而且買入的單位最重要是租得出,若買入了單位,然後一直找不到租客,在投資的角度便等如是浪費了機會成本,而且找不到租客的樓盤,升值潛力也有限。請記得,要買泰國樓賺錢,最重要的就是「地點」 有些人會說,只要買BTS沿線的泰國樓便不愁沒有租客,這肯定是錯的,而且地點不同,升值能力也會有較大差別,所以若是投資,選對「地點」一定最重要。 圖中 1 這是傳統曼谷的旅遊熱點,但請記住這三個BTS的站名,Siam、Chit Lom、Phloen Chit 留意當中不包括最多紅燈區的NANA,去旅遊的人當然會住酒店,不會租你的單位,不過不少人會在那裏工作,因為工作機會較多,租盤自然有需求,而且不少到泰國工作的海外人士也希望接近較有人氣的地方,方便吃喝玩樂,這自然也會在那裏找租盤。 圖中 2 Rama 9,這是新商業區,泰國交易所也已搬到這區,不用問也知道在那裏上班的人特別多,海外到泰國工作的人也特別多,正在你在中環番工也希望住在上環或灣仔銅鑼灣一樣,租客自然不難找到。 圖中3 Thong Lo、Ekkamai,這是泰國的日本人區,但其實有點像香港的跑馬地,不少有錢人也住在那裏,而重點是不少富二代、富三代也住在那裏,他們不買也會租,目的自然是住近身邊的朋友,另外當然少不了到泰國工作的日本人,這兩個地點的樓盤也很容易找到租客。 學懂善用Google Map 拿著這張泰國BTS的圖,可以看到每個站的名稱的,在Google Map打上BTS站名的名稱,比如Chit Lom Google Map先找BTS站 在Google Map可以很容易找到Chit Lom在那裏,也有不少相片可以看看附近的環境,比如Chit Lom附近便是四面佛,然後你可以按「規劃路線」,再輸入你有興趣的樓盤名稱,比如「Q chidlom」,直接自己看看樓盤距離BTS有多遠,也可以看看附近的環境,不要因為別人說樓盤附近的環境有多好你便相信,要自己看看,其實不用親身到泰國,Google Map也可幫到你手。即使某些樓盤的名稱輸入後是找不到,問問經紀們拿售樓書來看,你會找到樓盤的英文街名,再在Google Map輸入街名,也可從中看看附近的環境 按規劃路線 再輸入樓盤名稱,找到樓盤與BTS的距離,同時可透過Google Map的相片留意附近的環境 Q chidlom附近環境 樓盤在1 Siam、Chit Lom、Phloen Chit 、2 Rama 9、3 Thong Lo、Ekkamai這些地點的,越近BTS便越值租。 但若在4 Onnut、Udom Suk、Bangna、Bearing站這些地點,除非樓盤步行至BTS可以十分鐘內到達,否則真的會較難出租的,這些地點有很多的平價盤,50萬至60萬港元也能買到,你可以當他們是未發展的「寶林」,有一定升值潛力,附近也確實在發展中,但你現階段買入,要找租客便較旅遊區、商業區及日本人區的樓盤困難,而且租金回報也較低。 不過優點就是平,所以你要想清楚你是投資還是自住,若然你選擇這些樓盤,只是數十萬元的價錢,放租與否若你也覺得沒有所謂,閒來自己自住,那也未嘗不可。 最失敗的投資者就是那一種連自己要自住或投資也沒弄清楚的人,你若買入單位後放租,那你又怎樣可以自住呢 到你想自住時便趕走租客 其實買樓自然希望賺錢,最好當然是賺價、賺租又賺匯。 賺匯率 泰幣未來升值的潛力很高,相信在泰國4.0下,賺匯是可以做到的目標 賺租 樓盤一定要容易租得出的,不少港人買泰國樓,然後單位放租兩年也租不出,這便浪費了成本,寧可付較高的價錢,也要買容易租出的樓盤 賺價 旅遊區、商業區、日本人區都是升值潛力較高的地點,要賺價就不作他選,若在旅遊區,以目前的經濟來看,每年升值6%是可以達到的。而偏遠地區雖然在發展中,若你不介意把單位空置,然後等五至十年讓它升值,那當然也是可以的 簡單來說,地點才是買泰國樓最重要的,但留意一點,旅遊區及日本人區,根本沒有數十萬港元便能入場的泰國樓,即使有,質素也不會太好。入場費大約是140萬至160萬港元,而商業區的入場費則大約是70萬至80萬港元,只有偏遠的地點才會有30萬至50萬便能入場的單位,要想好自己可投入的資金有多少,30萬至50萬買入單位,然後兩至三年賺一倍的想法,根本是沒有可能的 筆者電郵 paul.mark881@gmail.com

澳門航空婦女節促銷,日韓MOP1,846起、台灣東南亞MOP1,076起!
激安優惠
OHChance 旅遊誌・2019-03-05

澳門航空推出婦女節促銷(但購買對象沒有限定女性,男性亦可),平飛在9至11月,但5至7月中部份航點都有d 貴100~300左右的票(視航點)。 《優惠價錢(來回連稅)》 8月28日至11月30日*東京:MOP2,228 10月5日至11月30日*大阪:MOP2,259*福岡:MOP2,228*首爾:MOP1,846*台北:MOP1,176*高雄:MOP1,076*曼谷:MOP1,250*峴港:MOP1,223*河內:MOP1,264  《出發日期及最長停留》.出發日期:8月28日至11月30日.最長停留:7天  《購票日期及方法》.購票日期:3月12日2359前.預訂方法:澳門航空官網.預訂網址:httpswww.airmacau.com.mo  【行李資訊】.澳門航空票價包20KG托運行李額。  附註:上述最低價錢為航空公司公告之最優惠價格,或本站能找到的最低價格;每一航班有否優惠票價及所存票量由航空公司決定,優惠票量有限售完即止。  價錢 Sample ndash; 澳門飛東京來回連稅MOP2,228 ===== 想搵平機票去玩,即上 OH!Chance!澳燦旅行資訊 httpsohchance.info 去日本旅行買咩 JR Pass好?即上 OH!Note!小燦的旅行筆記做功課 httpsohnote.info 唔知間航空公司好唔好坐?馬上 Subscribe OH Chance Youtube 睇睇佢:httpsyoutube.comcOHChanceTravel 睇埋 Facebook 專頁 httpsfb.comohchance 第一時間獲得最新旅遊資訊!

澳門時尚品牌I.N.K登陸「時尚匯」購物中心
專題報導
LifeMag Editor・2017-07-26

「澳門銀河trade;」綜合渡假城「時尚匯」購物中心作為澳門最具時尚風格的購物熱點,由2017年7月21日至2018年1月21日期間,隆重引入I.N.K 期間限定店,這個由澳門本土時尚設計團隊梁衍奇及陳小龍共同創立的時裝品牌,將為大家帶來一系列設計新穎兼揉合多元文化元素的時尚男士服飾。 I.N.K品牌名字的由來,除了是品牌營運總監梁衍奇及品牌設計總監陳小龍二人的簡稱之外,亦有「墨」的英文原意,喻意為「墨思湧泉」,以墨水將靈感泉源畫化成為每一段創作的憶記。I.N.K銳意求變,勇於透過新技術、新衣料與立體剪裁技術,開創時尚新風格。品牌的設計以澳門多元文化激想為創意出發,結合澳門本地文化、藝術、音樂、歷史憶記,創作出一系列領導潮流的時尚服飾。 於澳門出身的陳小龍畢業於台灣實踐大學設計學院,此後一直從事服裝行業至今。他曾於電視及演唱會擔任藝人造型設計師,並為多個品牌的男裝、女裝及童裝出任設計師。2011年,陳小龍在MFF澳門服裝節舉辦首場童裝服裝秀。2015年5月,他創立個人設計工作室NEVERKNOW Studio,自營Tshirt品牌與插畫設計,其後更獲Burberry邀請在香港及澳門舉行共11場插畫活動,並且與多個品牌合作推出聯名活動,包括台灣Wind Salon、台灣FFLives網站、台灣2501網站、泰國品牌Thorny Mouse、澳門ESpark及澳門INKY Store。 品牌另一名創辦人梁衍奇同樣於澳門出生,曾於Vivienne Westwood、Burberry、Hermes等國際奢華品牌從事零售及管理工作。梁衍奇為區內知名的時尚達人,曾為香港時尚網站Xanga、HK Blog和StyleTips的博客,並為澳門本地文化雜誌《梳打雜誌》的時裝專欄作者。2014年,梁衍奇創立結合時尚生活、旅遊、時裝、音樂及藝術元素於一身的INKY Store,之後更成為澳門首個獲邀出席倫敦、巴黎及首爾時裝周的澳門品牌。另外,梁衍奇亦多次參與電視劇、電影及音樂頒獎禮的造型工作。

[戯電遊玩] 距離名留青史只剩一步之遙 - 《破曉傳奇》
娛樂殿堂
君尋・2021-12-23

系列簡介和回顧 傳奇系列自首作幻想傳奇以來,重視動作性的戰鬥系統,以及性格鮮明和刻畫深入的夥伴,都是系列為人所津津樂道的特色。即使經歷20年的時光,新作《破曉傳奇》在承繼傳統優點的同時,亦為迎合現代人遊玩習慣,改良不少日式RPG為人詬病的元素(陋習),並成功取得系列支持者和新玩家的歡心。作為系列支持者的筆者(連系列作的手遊也有接觸)亦花了約75小時拿下本作的白金獎杯,適逢本作在2021年底奪下The Game Awards 2021的最佳角色扮演遊戲的獎項,讓久未動筆的筆者心血來潮,嘗試向各位分享本作的魅力。 本作亦繼續找來知名動畫製作公司ufotable製作開場和過場動畫 足以讓人廢寢忘餐投入遊戲的優點 以虛幻引擎(Unreal Engine)打造的《破曉傳奇》,成功在玩家眼前呈現栩栩如生的日系RPG的幻想世界,旅途中到訪的地區充滿鮮明特色,熾熱的大地、昏暗陰沉的城鎮、豐潤繁榮的都會、風中殘燭般的村莊,彷如絕對零度的冰冷堡壘,不但投入感大增,亦讓玩家不斷期待後續的冒險。製作組在關鍵的戰鬥系統上作出大幅更改,習慣過往的戰鬥方式的玩家在最初接觸本作時難免感到陌生,但上手後打出的爽快感可能成為系列顛峰。戰鬥在爽快之餘亦保留一定的鑽研要素,如何短時間內達成條件使出Boost Strike對敵人造成極大的傷害?面對不同類型的敵人應如何連段?加上遊戲在安排上讓玩家循序漸進認識戰鬥系統,當戰鬥系統所有功能都開放的時候,亦是玩家熟悉掌握戰鬥系統的時刻。其後隨著玩家對連段和系統的熟練度加深,戰鬥的爽快度亦隨之而增高。六位可控角色的戰鬥特式和操控差異亦處理得恰到好處,比起過去系列作,玩家不需要花太多時間熟悉其他角色的操作,便能在戰鬥中發揮角色的特性和打出漂亮的連段。新系統的Boost Attack不但讓沒能上場的隊員發揮特性,亦考驗玩家如何當機立斷,在適當的時候使用適當的攻擊為玩家取得更大優勢。 每名角色的刻畫都留下深刻印象 以連段達成Boost Strike對敵人使出大範圍的強力攻擊 每名角色的Boost Attack正好反映角色的特性 仍有潛力進一步完善的戰鬥系統 角色的遊玩性質雖然區分得清楚亦沒有過多重疊的職能,奈何主角威能過於強大,不論是特性的儲力攻擊,又或能使任何敵人必然倒地的Boost Attack,這些過於霸道的招式都讓普通玩家未必願意放手嘗試挑戰其他角色。至於上段提到戰鬥系統對連段的重視,亦僅只限於中小型的雜魚敵人。如過去系列同樣,BOSS和大型怪物幾乎都有鋼體,也就是沒法在他們身上打出連段。然而去到後期的迷宮中,大量敵人都有著極大身型,不但沒法以連段打出高傷害和使出Boost Strike,部份更是沒有弱點只能依靠普通攻擊和一般術技進攻,也導致每場戰鬥時間過長和乏味,並沒法維持遊戲中一直給予玩家的爽快戰鬥的樂趣。此外,手動控制角色能使用的術技最多有12種,可是卻分為6種地上使用的術技和6種空中使用的術技,部份角色不但難以在空中發揮特性,導致空中的術技成為裝飾,即使像主角一樣萬能型的角色,要在戰鬥中運用所有空中術技亦有一定難度,變相玩家在每場戰鬥中可以使用的術技相當有限。筆者並非批評把部份術技歸類為空中限定使用的遊戲設計,只是認為本作中應可進一步增加每場戰鬥中可使用的術技,畢竟在過去的系列作中,一名角色能設定16種沒有使用限制的術技,讓連段的自由度更為廣和深。 男主角的強度明顯比其他角色高出不少 由引人入勝的開場變為司空見慣的王道結局 故事上《破曉傳奇》的叙事方式相當引人入勝,玩家以失去記憶、對世界一無所知的男主角的角度,與他一同探索、認識和挑戰旅途中遇到的各種大小事。而故事在起初相當有野心,不單只是男女相遇再共同冒險的故事,更是透過主角立志解放地上所有被外來種族奴隸的人類,描寫和探討文化背景不同的兩種族的共處方式。可惜的是當故事來到中後段離開地面後,故事發展的速度快得讓玩家喘不過氣來。玩家認識到一個新事實,在短暫探索後又出現新迷團,再在短暫探索知道迷底,卻又再有點新迷團。此部份的劇情安排上非常不理想,不段接種以來的新設定和迷團,卻一次過把理應是高潮疊起的橋段全都放在同一地區中,玩家根本沒辦法完全投入前一個事實和迷底,卻又遇到劇情上再一次把這些設定推翻。作為上班族的筆者曾試過連續三個晚上都只是在看解釋性劇情(包括角色間閒聊的SKIT)。當劇情來到尾聲時,和過去系列作一樣以極為王道的方式處理,前段劇情探討的種族問題變得毫不重要,主角的目的亦只變成為了消滅某個邪惡的化身。 不但只是場景,人物的表情亦相當漂亮自然 愛之深責之切 除上面提到的明顯缺點,本作遊戲時間比過去的系列正傳要短、音樂幾乎沒能留下記憶點(相反不少人討厭的《熱情傳奇(TOZ)》的BGM卻被選為東京奧運的進場曲)都是本作中令人感到可惜的部份。可以肯定的是本作絕對會成為傳奇系列的歷史中極為重要的一作,大破大立後取得如此成績相當難得。然而卻肯定沒法像《FF7》、《Persona5》那樣名留青史,成為日系RPG的代名詞。筆者雖然諸多抱怨,實際上達成白金後依然意猶未盡,只要你是對王道日系RPG、魔法與劍的冒險故事感到興趣,《破曉傳奇》依然是非常值得一玩的佳作。 關於戯電遊玩 本欄目會分享能令筆者醉心投入的遊戲作品,不管是當下的還是過去的。 更多關於筆者喜歡的遊戲心得:httpsppt.ccfG71cx

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