Annotation(注解)是JDK5.0及以后版本引入的。它可以用於創建文檔,跟蹤代碼中的依賴性,甚至執行基本編譯時檢查。注解是以‘@注解名’在代碼中存在的,根據注解參數的個數,我們可以將注解分為:標記注解、單值注解、完整注解三類。它們都不會直接影響到程序的語義,只是作為注解(標識)存在,我們可以通過反射機制編程實現對這些元數據的訪問。另外,你可以在編譯時選擇代碼里的注解是否只存在於源代碼級,或者它也能在class文件中出現
注解定義很簡單:
@Target(ElementType.PARAMETER)
public @interface Test {}
使用時以@Test方式標記在方法體,類或參數上。Target(ElementType.PARA
METER)可以定義注解的標記類型。
常用 SPRING注解
1.@Controller
@Controller注解將一個類標明為用來接收HTTP請求控制器
2.@RequesMapping
@RequestMapping注解將特定的URL和具體的控制器類或控制類類中的方法綁定
3.@PathVariable
添加@PathVariable注解,可以直接在方法中使用請求URI中的值。
4.@Repository
用於將數據訪問層(DAO層) 的類標識為Spring Bean。具體只需將該注解標注
在 DAO類上即可。同時,為了讓Spring能夠掃描類路徑中的類並識別出
@Repository注解,需要在XML配置文件中啟用Bean的自動掃描功能,這可
以通過<context:component-scan/><context:component-scanbase-
package=”bookstore.dao”/> 如此,我們就不再需要在XML中顯式使用
<bean/> 進行 Bean 的配置。Spring在容器初始化時將自動掃描base-package
指定的包及其子包下的所有class文件,所有標注了@Repository的類都將被冊
為 SpringBean。
控制層使用的注解介紹
作用:參數注解。
com.sgcc.uap.rest.annotation.ColumnRequestParam
請求體是{columns:["id","name"]}的形式,指明方法的參數是從請求體中獲取的字符串數組。
用於在獲取元數據信息時,從請求體獲取顯示的列,並將列名封裝為字符串數組。
例如:請求參數為params={“columns”:[“id”,“name”,“sex”]},返回數據為:String[]{“id”,“name”,“sex”}
使用示例:@RequestMapping("/meta")
public @ColumnResponseBodyList<ViewAttributeData>getMetaData(
@ColumnRequestParam("params")String[] columns) {
…………
}
作用:方法體注解,對返回值進行攔截。
攔截List類型的返回值,將返回值解析為JSON格式字符串,如:
{“columns”:[{“name”:”id”,”caption”:”編號”,”length”:32},{},{},…]}
com.sgcc.uap.rest.annotation.ColumnResponseBody
響應體是{columns:[{},{},{}……]}的形式,指明將方法返回值轉化為JSON格式列信息,
將返回的對象轉換為json串。
返回對象為ViewAttributeData,
返回數據格式為:
{"columns":[{"name":"id","caption":"ID",nullable:false,dataType:"string"},...]}
3. @IdRequestBody:
作用:參數注解。
攔截請求體為{params:{primaryKey: ”EMP_ID” , ids:[”001”, “002”,……] }}格式的數據,將此數據轉換為字符串數組。如
[“0001”,”0002”]。
com.sgcc.uap.rest.annotation.IdRequestBody
指明方法的參數是從請求體中獲取的字符串數組 ,並將主鍵信息封裝為IDRequestObject對象。通過getPrimarykey()和getIds()取出主鍵名稱和主鍵值
例如:用於刪除操作從請求體中獲取主鍵
public @VoidResponseBody
Object delete(@IdRequestBodyIDRequestObjectid) {
。。。。。。
}
4. @ItemRequestParam:
作用:參數注解。
com.sgcc.uap.rest.annotation.ItemRequestParam
攔截請求數據{“itemType”:”school”},將數據的itemType解析,返回字符串。例如返回:school。
該注解用於在樹場景中取出節點的itemType。使用示例:
public @TreeResponseBody
List<TreeNode>getNodes(@PathVariableString id,
@ItemRequestParam("params")StringitemType){
。。。。。。
}
5. @ItemsRequestBody:
作用:參數注解。
com.sgcc.uap.rest.annotation.ItemsRequestBody
攔截請求體的數據格式:
{“items”:[{“id”:”01”,”name”:”n1”},{},{},…]}和{“parentID”:”0003329281”,“items”:[{“id”:”01”,”name”:”n1”},{},{},…]}
將數據轉化為List<Map>格式,list中map封裝一個item數據
使用示例:用於保存場景,將請求體中的記錄封裝為到list中。
public @ItemResponseBody
List<SchoolVO>saveSchool(@ItemsRequestBodyList<Map>list) {
。。。。
}
6. @ItemsResponseBody:
作用:方法體注解。
攔截返回數據。將返回的list集合轉化為json字符串。
{“items”:[{“id”:”01”,”name”:”n1”},{},{},…] ,itemCount:100}
com.sgcc.uap.rest.annotation.ItemResponseBody
攔截返回數據。將返回的list集合轉化為json字符串。指明返回值將以
{items:[{}{}{}{}]}的形式返回。使用示例:
public @ItemResponseBody
QueryResultObjectquery(@QueryRequestParam("params")
RequestConditionparams){
。。。。。
}
7. @QueryRequestParam:
作用:參數注解。
com.sgcc.uap.rest.annotation.QueryRequestParam
GET請求中從url中通過指定KEY值將參數取出,用於查詢條件。
QueryRequestParam("params"),將url中的{"params":{"filter":"name ='eqe'&sex='female'","orderStr":"age","columns":"id,name,age,sex"}}轉換為RequestCondition對象。使用實例:
public @ItemResponseBody
QueryResultObjectquery(@QueryRequestParam("params")RequestCondition
params){
。。。。。
}
8. @QueryRequestParam:
作用:參數注解。
com.sgcc.uap.rest.annotation.QueryRequestParam
GET請求中從url中通過指定KEY值將參數取出,用於查詢條件。
QueryRequestParam("params"),將url中的{"params":{"filter":"name ='eqe'&sex='female'","orderStr":"age","columns":"id,name,age,sex"}}轉換為RequestCondition對象。使用實例:
public @ItemResponseBody
QueryResultObjectquery(@QueryRequestParam("params")RequestCondition
params){
。。。。。
}
9. @RawResponseBody:
作用:方法體注解。
攔截返回值,對於字符串類型的返回值可以原樣輸出。
對於List或對象類型的返回值轉換為響應的json字符串輸出。方便用戶封裝自定義的格式。
com.sgcc.uap.rest.annotation.RawResponseBody
指明方法的返回值應當以原生返回值的形式,綁定到響應體中 ,使用該注解的方法應當返回object。
使用示例:將方法中返回的字符串原樣輸出,用於自己拼裝返回的格式,不用平台的json轉換。
public @RawResponseBodyObject test(){
return"welcome!";
}
示例中的方法將字符串”welcome!”原樣返回。
11. @VoidResponseBody:
作用:將空返回值包裝為通用的返回格式。
com.sgcc.uap.rest.annotation.VoidResponseBody
用於沒有特定返回值得方法注解,將對象轉換為統一的json串。如:
{
"successful":true, ————方法是否調用成功
"resultHint":"", ————異常信息
"resultValue": “” ————數據信息是空的
}
例如:刪除操作
public @VoidResponseBody
Object delete(@IdRequestBodyIDRequestObjectid) {
。。。。
}
Hibernate實體映射注解支持
平台已經引入了hibernate的注解功能,具體用法與hibernate注解映射相同,
詳細用法可參考Hibernate注解映射相關文檔。
@Entity
@Table(name= "O_ORG")
publicclass ORG implementsjava.io.Serializable{
@Id
@GenericGenerator(name="ORG_ID",strategy="uuid")
@GeneratedValue(generator="ORG_ID")
@Column(name="ORG_ID")
public String getId() {
return this.id;
}
public void setId(Stringid) {
this.id = id;
}
}