搜尋

搜尋結果

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

乾貨!聖誕“剁手季”必知,澳門這些化妝品店最“平靚正”!
其他
澳門生活圈・2018-12-25

聖誕節到啦! Macaulife祝小夥伴們聖誕節快樂! 每年到了今天 澳門的大街小巷都熱鬧非凡 本地居民、外地朋友溢滿小城街頭 一起感受聖誕的歡慶氣氛 順便趁著節日優惠到澳門消費 作為世界四大賭場之一的澳門 除了賭和娛樂 更是愛美小仙女們 瘋狂quot;買買買quot;的購物天堂 一般來說 到澳門購買護膚品和化妝品 往往比在香港購買還要划算 因此港珠澳大橋開通後 更是有無數妹子們乘車來買個痛快 尤其是每逢聖誕節和年末 商家還會推出各種各樣的折扣優惠 充滿驚喜的價格 讓小仙女們尖叫不已! 當然 吸引人來剁手的絕不止是因為便宜 下面,小編就告訴大家 仙女們在澳門狂買護膚、化妝品的 『三大理由』 理由一 港澳化妝品無關稅 國內市場賣的外國化妝品打的關稅是很重的,有些甚至要打50%稅。 而港澳化妝品經銷商是從國際化妝品品牌廠家直接進貨,不需要本地授權費用,不需要給中間商吃掉利潤,另外港澳化妝品無關稅。所以在澳門購買化妝品,會比國內便宜。 理由二 品質有保障 澳門化妝品的品質是很有保障的。由於很多產品都是原裝進口,所以有些產品無論是瓶身的包裝,瓶的字樣注解與內地會有些不一樣。 例如有的產品整個瓶身都是英文,日文,或者韓文。在條碼上,你也可以看出是否真的是原裝進口商品。 理由三 護膚、化妝品種類多 澳門的護膚品和化妝品種類多,選擇也多。 許多國內沒有的商品可以在澳門找到,那些在雜誌上在電視上羡慕的商品你也可以擁有。 那澳門有哪些 最值得ldquo;買買買 ldquo;平靚正rdquo;的美妝店? 莎莎化妝品店 綜合評分 品牌齊全:★★★★☆ 服務品質:★★★★★ 商品價格:★★★★ 澳門的莎莎化妝品店,銷售逾四百個品牌產品,包括護膚品、香水、化妝品、頭髮護理用品、以至專有及獨家代理的國際品牌產品,價格比新八佰伴專櫃價格低三分之一。這裏成為去澳門遊客必去的化妝品購物天堂。品種繁多的化妝品讓你隨心挑選、滿載而歸。 最後一定要說的就是,在sasa買了東西以後一定記得要贈品哦,一般東西都是有贈品的,不過只要你不問,人家是不會主動給的。 澳門莎莎門店分佈 1、澳門議事亭前地1820A號中華商業大廈地鋪 2、澳門威尼斯人度假村大運河購物中心2318 amp; 2320鋪 3、澳門蘇亞利斯博士大馬路81至113號澳門廣場地下O鋪及閣樓 4、澳門銀河G59 號鋪 5、高士德大馬路2333號地鋪 6、澳門賣草地街23至23A號青翠大廈地下A座連閣樓 7、澳門板樟堂街1E 1F 卓悅化妝品專門店 綜合評分 品牌齊全:★★★★ 服務品質:★★★☆ 商品價格:★★★★ 澳門卓悅化妝品專門店是澳門有名的實惠店鋪,許多產品甚至比香港的還便宜,同時深受外地旅客的喜愛。 主要原因當然是因為卓悅化妝品售價一直以來都比一般市面價低,貨品種類也是多不勝數。有些其他家都沒有的東西,卓越是有的。特別是香水和面膜齊全。有些難進到的貨只有卓越有,而且價格完爆其他家。 澳門卓悅門店分佈 1、澳門大三巴街1111A號華髮大廈地下 2、澳門板樟堂街1214號物業全幢 3、澳門板樟堂街5B7號 屈臣氏 綜合評分 品牌齊全:★★★★ 服務品質:★★★☆ 商品價格:★★★★ 屈臣氏裏面化妝品的種類繁多,都是原裝正品的,而且比國內的價格優惠很多。 除了化妝品之外,日雜品也十分齊全,來這裏逛也實在是很方便,也是很多女性朋友們過澳門必去的地方。 澳門屈臣氏門店分佈 1、威尼斯人大運河購物中心3樓2025號鋪 2、議事亭前地11號信德堡地下及13樓 3、水坑尾街6292號中建商業大廈地下A,B,C,D鋪及1樓 4、氹仔基馬拉斯大馬路179號濠景花園第一期21座地下G鋪街鋪第6號 5、黑沙環第一街佑佳大廈地鋪 6、連勝馬路28A泉勝軒地下B鋪 7、看臺街62號康和廣場地鋪 8、嘉路米耶圓地添運大廈6A地下BC鋪 9、湧河新村62號 萬寧Mannings 綜合評分 品牌齊全:★★★★ 服務品質:★★★★ 商品價格:★★★☆ 萬寧主要產品包括護膚品、保健品、食品、飲品、化妝品、個人護理用品、時尚用品以及男士用品等。薇姿、歐萊雅、玉蘭油等大眾品牌化妝應有盡有。 不過在化妝品價格方面一般沒有優勢,有點類似屈臣氏的感覺。但是這裡可以買到韓國、日本等不同品牌的衛生巾,還有許多進口零食、奶粉比較齊全,洗護的洗頭水,沐浴露常常會做套裝,如果只是想買生活用品的話,來這裡還是能很方便的找到的。 澳門萬寧門店分佈 1、氹仔哥英布拉街125號花城利厚利圖利偉利業地下W座 2、議事亭前地7a號旁 3、高士德大馬路111 4、板樟堂街20號龍昌商業大廈地下A座 5、和樂大馬路120號地下D鋪 6、黑沙灣馬場大馬路330號信達廣場一座商場地下FG鋪 7、路氹城望德聖母灣大馬路銀河娛樂城內 8、高士德大馬路111號日旺樓地下A鋪 卡萊美Colourmix 綜合評分 品牌齊全:★★★☆ 服務品質:★★★★ 商品價格:★★★★★ 銷售逾百種國際美容品牌,產品種類包括護膚品、香水、彩妝、個人護理及潮流產品等。他們家沒有很大的門店,每間店都是小小的,粉紅色的門頭,在眾多光鮮的化妝品門店下顯的特別不起眼。但是!它家的東西一定是最便宜的! 有人可能覺得ldquo;東西那麼便宜,會不會是假貨啊!rdquo;這個一般可以放心,以小編在卡萊美的消費經驗,完全可以放心買。但是這裡是沒有贈品,贈品都被導購貼上價簽放在櫃檯上出售了,所以說,如果你想買個小樣試試好不好用,就可以來卡萊美買哦。 澳門卡萊美門店分佈 1、澳門高士德大馬路8181A, 83號 2、澳門高士德大馬路40E號永益大廈地下A座 3、澳門板樟堂街7A7B地下 4、澳門亞美打利庇廬大馬路新馬路376號全幢 5、澳門馬統領街4143號萬勝大廈III地下A及B號舖 Sweetmay 綜合評分 品牌齊全:★★★★☆ 服務品質:★★★★☆ 商品價格:★★★★ 主要是賣韓國化妝品,在新馬路和威尼斯人各有一家。一般韓國的牌子都是有的,不過也許是專賣店的原因,價格相對較高,如果是隔壁SASA可以買到的韓國商品。Sweetmay都會比SASA價格高,但沒辦法,勝在貨全! 另外值得一提的是,裡面的導購美眉比較熱情,會耐心幫你找東西,最後還會有一些試用裝贈送! 澳門Sweetmay門店分佈 1、澳門板樟堂街1D號鋪(噴水池附近) 2、澳門大三巴街3號 大運河購物中心 綜合評分 品牌齊全:★★★★ 服務品質:★★★★☆ 商品價格:★★★★ 亞洲獨一無二的購物天堂澳門大運河購物中心,被超過300家世界級名店環繞,可以隨意在小石路上散步或者乘坐小船悠然自得地泛舟河上。 這裏絕對是選購化妝品的好地方,也吸引了很多MM們慕名前來血拼化妝品一番,此外還有頂級時裝、珠寶、飾物、禮品、服務、餐廳以至運動用品。 大運河購物中心 地址:澳門氹仔望德聖母灣大馬路威尼斯人 四季名店 綜合評分 品牌齊全:★★★★ 服務品質:★★★★ 商品價格:★★★☆ 至今已擁有逾180家世界名牌專門店、號稱亞洲最強的澳門四季名店絕對是你選購奢侈化妝品的購物天堂! 除了大家熟知的LV、GUCCI等,還有眾多連港澳人也不知道的世界級名牌駐紮在這裏。 澳門四季名店 地址:澳門路氹金光大道四季酒店內 新八佰伴百貨 綜合評分 品牌齊全:★★★★☆ 服務品質:★★★★ 商品價格:★★★☆ 澳門新八佰伴百貨,這家全澳門最受歡迎的大型購物商場,商場規模宏大,商品應有盡有,尤其是電器、照相機等高端電子產品更是品種齊全,價格比內地乃至香港都便宜得多,這裏是女性澳門之旅的必去之地。 澳門新八佰伴百貨 地址:澳門蘇亞利斯博士大馬路90號 澳門美妝小貼士可能有人會發現澳門買的護膚品和化妝品幾乎都是沒有生產日期的。很正常! 因為原裝進口的商品,通常是以批號的形式來表示生產日期,每天到澳門SASA,卓悅購物的遊客成千上萬,商品天天供不應求。 均為一年內生產的商品,護膚品的保質期為3年,彩妝的保質期為5年。 如果要買化妝品的,儘量可以選擇上午或中午,那時候人會稍微少一點,而且貨存還是比較多的。 要是等到下午或傍晚,那時人多就不用說了,關鍵是你想買的東西很有可能已經被人掃光了hellip;hellip; 另外小編推薦一個遊客比較少到的地方:高士德。那裡也有sasa、colormix、bodyshop,也有一些熱門的服裝品牌。重要的是高士德是居民區,逛逛街市領略一下風土人情,更重要的是有很多本地人去的價廉物美的餐廳,是個不俗的民間美食根據地。 另外,介紹一下水貨。澳門有很多化妝品小店可以淘到日韓的化妝品,不過稍微類似某寶,可能會承擔一定風險。但我相信在澳門買到的應該都是正品。 內容素材:網絡 圖片來源:攜程、百度、Macaulife、廣告海報、GIF 版權屬於原作者 編輯撰寫:小宇

皮膚都有急救箱?Bobbi Brown新出急救煥膚原液
美容
Ping・2017-02-09

相信姐妹們都有試過,需要完美示人的日子,臉上卻偏偏忽然出現各種各樣的情況,比如說乾得上不到妝,或者出現暗瘡、皮膚敏感等,再好的化妝品都遮不住,這樣的狀況相當令人無奈。 Bobbi Brown的創辦人原來都有同樣的煩惱,所以特別為此研發出Remedies急救煥膚原液系列,為各種不同問題的肌膚作出即時急救,打造皮膚急救箱! Bobbi Brown Remedies急救煥膚原液系列 $420一支 $2520一套 對於一向主打化妝品的Bobbi Brown,竟推出了護膚品,大家都相當好奇。Bobbi Brown Remedies急救煥膚原液系列共有六款不同功效的產品,針對即時及持久改善膚色,以提升肌膚整體健康為主。 在空氣污染問題嚴重的澳門,皮膚易因空氣問題變差,這個系列其中有一支為Skin reviver,就是專門針對這個問題而設,它含綠海藻、羽衣甘藍、 菠菜萃取等,有效抗氧化,只要洗完面即刻搽,便可發揮保護功能,補充皮膚受環境侵害而失去的養分。 Skin reviver 還有為皮膚保濕的Skin Moisture,增強皮膚吸收保養能力的Skin Fortifier,助敏感肌膚紓緩鎮靜的Skin Relief,增強皮膚免疫力的Skin Clarifier,以及可保護修復肌膚的萬用膏Skin Salve。這些產品可以單獨或互相配合使用,於妝前塗上,打好底,化妝就更完美。

帶媽媽感受與別不同的鷺環海天
旅遊情報
LifeMag Editor・2016-04-28

有沒有想過為媽媽安排一趟煥發旅程,讓她感受鷺環海天的大自然優美景色,再到水療中心享受免費指甲及腳部護理由 4 月 28 日至 5 月 31 日預訂母親節住宿套餐,價格只需澳門幣1,031 起每房每晚,包括一晚住宿、免費客房升級、兩位指甲及腳部護理及無限使用康體部設施 母親節煥發住宿套餐  一晚標準園林景觀客房住宿連私人露台  房内無綫無限上網  兩位指甲及腳部護理  餐飲 75 折優惠 客房用餐及外賣服務除外  免費使用康體部設施 包括健身房、桑拿室 蒸氣浴室、按摩池、室內及室外游泳池  免費使用酒店來回澳門外港客運碼頭穿梭巴士服務 細則及條款 1. 以上價目為澳門幣。需附加 10% 服務費及 5% 政府旅遊稅。 2. 套餐及水療項目需視實際情況而定及提前預訂。 3. 額外住客需加收相應之附加費。 4. 預訂必需提供信用卡資料以作保證。 5. 未於原定時間入住或於到達前兩天的當地時間下午 6 時後取消預訂者,需支付一晚房價及相關稅款。 6. 以上住宿套餐不可與其他優惠或折扣同時使用。 7. 可升級至其他水療項目,需加收相應之附加費。 8. 鷺環海天度假酒店保留取消及更改此優惠,並怒不另行通知。 9. 如有任何爭議,鷺環海天度假酒店將保留最終決定權。 如欲查詢詳情,請致電 853 8899 1198 或電郵至 reservations@grandcoloane.com。

【Macau Best】澳門壽司外賣推介,在家也能吃好料!
澳城餐飲
Lifemagfoodie・2021-09-21

不少人都喜歡食壽司、刺身,但又不想出外堂食,現在澳門有不少外賣壽司店都可以滿足要求,點完單馬上送到家裹。以下介紹幾間壽司外賣店,快往下看吧! 江戶日本料理 向來小貴的江戶日本料理,壽司品質不在話下,現在它推出的外賣壽司盤非常抵食,雜錦壽司拼盤只需 $350就有一盤、而$600更有兩盤!平時堂食絕對不止這個價格、指定卷物亦有買一送一,只需要打電話預訂即可。 圖片來源:江戶日本料理 江戶日本料理 葡京店:(853)2871 3888 壹號廣塲店:(853)2872 2829 澳門威尼斯人店:(853)2882 8321 新濠天地店:(853)2882 4818 澳門倫敦人店:(853)2885 2918 匠屋 位於黑沙環海上居的匠屋,雖然沒有堂食,但是它從開業至今仍十分受歡迎。以匠心工藝和專業技術,給食客帶來用心的製作。除了壽司刺身外,更有兒童壽司盛合,可愛的貓貓飯團受到不少小朋友喜愛! 圖片來源:匠屋 匠屋 地址: 黑沙環中街 海上居地下AA鋪[海上居與君悅灣之間停車位置] 電話:28236765 62818912 預訂及查詢MENU請微信 TAKUMI_YA5 三葉 同樣在壽司界有名的三葉,除了有堂食店之外,氹仔亦有外賣店。餐廳有各種壽司、卷物、刺身和食飯串燒等之外,還有特色兒童套餐。熱賣的「極上一人前」,是omakase(廚師發板)的12件極上壽司,絕對不可以錯過! 圖片來源:三葉 黑沙環海上居堂食店 地址:黑沙環中街913號地下U鋪 電話:63783232 WeChat:sanye63783232 營業時間:11301430 18002230 氹仔南新外賣店 地址:氹仔南新花園第六座地下L 鋪 電話:65693232 Wechat:sanye65693232 營業時間:12002230 天鱗鮨樂 目前只有自取外賣的天鱗鮨樂,堅持追求採用高級日本新鮮空運飛機貨,透過擁有超過20年壽司經驗和曾在澳門米其林2星日本餐廳擔任資深壽司廚師的「強師傅」,由於壽司只有師傳一個人做,所以建議提早落單! 圖片來源:天鱗鮨樂 天鱗鮨樂 地址:澳門黑沙環大馬路46號地下龍園百佳隔離) 電話:6694 8156 營業時間:1200 2130 海幸 食材來自日本豐洲漁巿場和九洲福岡漁巿場,並會根據季節而改變菜式,令客人體驗更多日本四季的鮮味食材,海幸有各式各樣的日式壽司、刺身、特色卷物等,喜歡吃壽司的朋友千萬不要錯過! 圖片來源:海幸 海幸 地址:澳門草堆街77號地下B鋪 電話:65513388 營業時間:1700 ndash; 2230 (週一公休) 河童食堂 河童食堂同樣是不少喜歡吃壽司的朋友的選擇,所有食物即叫即做,餐廳有刺身、壽司、卷物、天婦羅、燒物等。不過目前只提供澳門地區外賣,氹仔路環區的朋友就要另覓其他食店了。 圖片來源:河童食堂 河童食堂 地址:文第士街21A (即雅廉訪大馬路石獅子對面 建新傢私隔離條街直入 ) 電話:66828430 營業時間:1800 ndash; 0200