java 板


LINE

※ 引述《kyleJ (資工人)》之銘言: : 大家好,扣除回文之外,這是我第一次在PTT上發文 : 若有不恰當的地方還請多多指教,謝謝 : 之前我用Java都是Java SE的部分比較多 : 主要做網頁爬蟲,連接檔案系統或DB儲存與分析資料 : 也有寫Swing或JavaFX做GUI給User : 但Java EE的部分就沒什麼接觸了 : 以前為了一個國科會案子有自己土法寫JSP/Servlet : 有維護過AXIS2產生的WebService的Server code : 除此之外好像沒什碰到Java EE的東西 : 後來我寫網頁服務應用都以PHP為主 : 再配合CodeIgniter的MVC框架才了解到MVC的好 : 所以最近要準備以Java寫RESTful服務決定研究Spring+Hibernate : 首先是Spring的部分照著spring.io的訓練做真是嚇人的好用 : Hibernate的存在更是讓我覺得之前浪費了很多生命寫業務邏輯外的程式... : 抱歉,前言好像多了點 : 在Spring上我使用RestController來寫控制器 : 也用過RequestBody來讓Client直接丟JSON變成Java物件使用 : 如一個新增User到資料庫的服務: : @RequestMapping("/add") : public ResultBean addUser(@RequestBody User user){ : // 先檢查user不為null : // 再檢查user裡面所有field都不是null : // 再把user丟去hibernate儲存 : // 返回自訂的Result物件讓Sprint自動轉為JSON : } : 這邊收到user第一件要做的事情檢查是user不是nulll : 第二件要檢查是不是user的所有field都非null : update的服務也是如此,而其他物件的add、update也都必須要做 : 這是事先訂好的,field可以是空字串,但不能是null : 這部分我有寫一個運用反射自動檢查所有field的工具 : 丟任何物件進去都能檢查有哪些field,以及是否全部都非null : 但我好奇有沒有方法讓Spring自動檢查RequestBody? : 或是把Body轉為物件後,先經過我寫的程式檢查再呼叫mapping的method? : 若是Servlet我會override service method先檢查 : 沒問題後再讓他轉去doXXX方法執行 : 但對Sprint不熟不知道該怎麼做 : 上網查詢查到比較多Struts2的資訊 : 想在此請問各位前輩們,感謝! Spring 在 4.2? 後引新了一個方便的新功能 RequestBodyAdvice http://bit.ly/2bDmmWP 直接看 code :P @ControllerAdvice @Component public class DoSomethingWithRequestBodyObject extends RequestBodyAdviceAdapter { @Override public boolean supports(MethodParameter methodParameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) { return methodParameter.hasParameterAnnotation(RequestBody.class) && User.class.equals(methodParameter.getParameterType()); } @Override public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) { // 這裡就放你的 reflection tool 吧 if (body instanceof User) { User user = (User) body; if (user.getFoo() == null) { user.setFoo( "假的!你眼睛業障重啊,怎麼會有 null 的值呢?"); } } return body; } } ========================================================================== 有正確宣告 bean 或被 scan 到就會出現 log s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded .AnnotationConfigEmbeddedWebApplicationContext@31d7b7bf s.w.s.m.m.a.RequestMappingHandlerAdapter : Detected RequestBodyAdvice bean in doSomethingWithRequestBodyObject ========================================================================== qrtt1$ curl -H "Content-Type: application/json" -X POST -d '{}' http://127.0.0.1:8080/addUser | jq . % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 75 0 73 100 2 299 8 --:--:-- --:--:-- --:--:-- 299 { "foo": "假的!你眼睛業障重啊,怎麼會有 null 的值呢?" } qrtt1$ curl -H "Content-Type: application/json" -X POST -d '{"foo":"太棒惹"}' http://127.0.0.1:8080/addUser | jq . % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 38 0 19 100 19 3170 3170 --:--:-- --:--:-- --:--:-- 3800 { "foo": "太棒惹" } --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.21.157.224
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1472702492.A.FCE.html
1F:推 gmoz: 太棒惹 09/01 15:06
2F:推 swallowcc: 太棒惹 09/01 19:47
3F:推 kyleJ: 太棒惹 非常感謝熱心教學!!! 09/01 22:52
4F:推 NullLife: 大推! 09/02 00:51
5F:→ lucky1lk: 太棒惹 假的!你眼睛業障重啊,怎麼會有 09/02 07:08
6F:→ pttworld: 版本發展不曉得是否還流行Validator 09/03 08:25
7F:推 givemepass: 太棒惹 09/04 16:15







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP