-
Spring MVC中傳回JSON資料的不同方法
-
Spring 3 MVC ContentNegotiatingViewResolver example,該檢視解析器,可以用於將同一份模型資料展現為不同的表現形式,例如JSON、XML和RSS等;
-
利用
@ResponseBody
註解修飾控制器方法,併在xxx-servlet.xml中開啟spring mvc支援——
,這種機制背後的原理是MessageConverter。
最近用Mockito寫單元測試的感受,單元測試有兩點好處:(1)利於解耦程式碼,降低程式碼的耦合性,在寫單測的過程中,你會不自覺將不屬於當前業務邏輯的程式碼分割出去;(2)單元測試是修改程式碼的有力保障,使得我們在修改程式碼之後能及時測試本次修改是否正確。總之:單元測試並不只是為了驗證你當前所寫的程式碼是否存在問題,更為重要的是它可以很大程度的保障日後因業務變更、修複Bug或重構等引起的程式碼變更而導致(或新增)的風險。
IDEA的使用經驗
-
必備外掛:Maven Helper,用於分析jar包衝突
-
常用快捷鍵
-
Idea的左下角,灰色方塊,游標cover上去以後可快速喚出各個View
-
Comman + Y,刪除一行
-
alt + Enter:當游標在類名時,使用該快捷鍵可以建立測試用例、建立子類和使得該類區域性化;當游標在區域性變數上時,使用該快捷鍵可以新增Javadoc、轉變成ThreadLocal變數、轉變成Atomic變數、改變變數的開放級別;當游標在函式上時,也有對應的功能,可自己去探索;
-
alt + Command + u:將游標放在某個類上,透過該快捷鍵可以構造出該類所屬的繼承體系,如下圖所示:
-
Refactor功能,具體可參考《重構》一書;我之前也有一篇讀書筆記:《重構》閱讀筆記-程式碼的壞味道
-
Git版本管理
-
檢視commit記錄
-
檢視每個commit的修改記錄
-
檢視指定檔案的修改歷史
-
比較不同版本直接的diff
-
提交程式碼(提交之前可做靜態掃描、最佳化import、檢視todo等)
-
分支合併,區分rebase和merge的區別
-
遠端除錯功能 :在Edit Configuration中可新建Remote,指定遠端伺服器的IP地址和埠,即可遠端除錯
效能測試時需要註意的
-
日誌級別調成warn級別;
-
發現CPU佔用過高時,利用jstack檢視行程棧,看看什麼動作比較耗CPU;具體可參考關於JVM CPU資源佔用過高的問題排查。我最近遇到一個case,是RSA解密消耗了大量的CPU時間,那麼我們在開發時,要註意儘量減少RSA解密的次數。
MyBatis報錯:“Error querying database. Cause: java.lang.UnsupportedOperationException”,錯誤程式碼如下:在這裡,resultType指的是查詢到的每條記錄的型別,因此應該用
java.lang.String
。
作為一個對外開放的介面,或者供其他模組呼叫的介面,必須做到以下幾件事:
-
入參檢查
-
異常處理
-
統一的結果生成
-
配套的單元測試和介面測試用例,防止程式碼修改引入新的bug
在ArrayList中去掉重覆的物件(按照自定義的重覆定義規則),如:[原創]JAVA技巧:去除ArrayList裡面的重覆記錄](http://www.cnblogs.com/jizha/p/javaarraylistduplicate.html)
在透過URL引數傳入時間時,後臺可考慮使用InitBinder自動將時間字串轉換成Date物件,並系結到Controller的入參,例子程式碼如下: “` //the parameter was converted in initBinder @RequestMapping(“/date”) public String date(Date date){ System.out.println(date); return “hello”; }
//At the time of initialization,convert the type “String” to type “date” @InitBinder public void initBinder(ServletRequestDataBinder binder){ binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat(“yyyy-MM-dd”), true)); } “`
關於Spring MVC中
、@ResponseBody
、HttpMessagerConverter
等的實現原理,SpringMVC關於json、xml自動轉換的原理研究[附帶原始碼分析]這篇文章,以及對應的程式碼分析,基本上都講清楚了。PS:MappingJackson2HttpMessageConverter和MappingJacksonHttpMessageConverter的區別在於,Spring 4版本都用前一個。
常用Git作為程式碼管理工具,除了熟練使用IDEA中提供的圖形化Git管理功能,也需要瞭解這些GUI背後對應的指令,那麼久需要看如下資料:
-
猴子都能懂的Git入門
-
Pro Git(V2)
Spring MVC基礎知識總結:史上最全的SpringMVC學習筆記。在第十七節,作者只是提出了要建兩個容器配置檔案(applicationContext.xml和xxx-servlet.xml),並透過exclude和include配置防止bean的重覆載入,不過沒有深入講解其背後的原因。 Spring 容器(Spring 的背景關係)這篇文章給出了詳細解釋:在Spring MVC專案中,這兩個父子容器的角色不同:(1)父容器中儲存資料源、服務層、DAO層、事務的Bean;(2)子容器中儲存Mvc相關的Action的Bean。對應到例子中,applicationContext.xml定義父容器,xxx-servlet.xml定義子容器。 取用官方檔案中的一張圖片,可以清晰地看出dispatcherservlet背景關係和Root應用背景關係之間的關係:Root應用背景關係用於提供service、資料庫等bean,可供多個dispatcherservlet背景關係使用。
最後,再重溫下spring mvc的處理流程,在進行Java Web開發的時候,也時刻不要忘記對HttpRequest的處理流程。