[問題] Spring的RequestBody

作者: kyleJ (資工人)   2016-08-30 00:46:23
大家好,扣除回文之外,這是我第一次在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的資訊
想在此請問各位前輩們,感謝!
作者: haha02 (來人!上夾棍!)   2016-08-30 00:56:00
Spring幫你做data binding的時候可以一起做驗證https://spring.io/guides/gs/validating-form-input/http://goo.gl/z3Xjr1 看看這些吧
作者: gmoz ( This can't do that. )   2016-08-30 13:00:00
JSF2: 我也很好用阿QQ
作者: gpctv (gpctv)   2016-08-30 13:14:00
題外話,為何我用spring 4.0加Hibernate在作資料insert都會出現no session found 的錯誤
作者: haha02 (來人!上夾棍!)   2016-08-30 14:10:00
樓上你這個應該是Hibernate session沒有綁到當前scope你要看一下你的交易控制的AOP設定
作者: gpctv (gpctv)   2016-09-02 01:17:00
感謝haha,我重new一個project,發現在application.xml內要加transcation manager,然後那個好像早期版本沒那麼嚴,現在連線資訊好像要另外寫然後放到web-inf內然後在設定propertyConfigutersessionfactory要定義datasourse有點顛覆過去的做法,感謝你

Links booklink

Contact Us: admin [ a t ] ucptt.com