日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

框架:SpringMVC常用注解总结

發布時間:2025/3/21 javascript 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 框架:SpringMVC常用注解总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在項目學習的過程中,使用到了哪些注解呢?

1:@RequestMapping

RequestMapping可以注解到類或者方法上,可以用來處理請求地址的映射。

注:注解于類上,說明該類中所有的響應請求方法都是以該注解地址為父路徑的。

RequestMapping有幾個屬性,把最重要的幾個分成以下3個類:

1)????value, method;

value:

指定的請求地址,或者URI模式的地址。

具體實現如下:

? ? ? A:具體類:@RequestMapping(value="/user/roles/)? ? ? ? ??

? ? ? B:含某個變量的類:@RequestMapping(value="/user/roles/{uid})? ? ?

????在聲明方法時: ? ??

?????publicStringgetProduct(@PathVariable("uid") Long uid){ ? ? ?

????} ? ??

????則把聲明的參數“uid”與形參uid所綁定,此時取得的形參是地址傳遞的uid參數。 ? ? ????

????C:含有正則表達式的類Method:

Method:

制定請求的方法,GET,POST等,若無聲明,則默認幾個常見的都可以。如GET、POST、PUT、DELETE等都可以取得。

4:?@GetMapping

?@GetMapping是一個組合注解,@RequestMapping(method= RequestMethod.GET)的縮寫。該注解將HTTP Get 映射到特定的處理方法上。

???????? 所以此處個人的理解,@GetMapping可以算是@RequestMapping的子集,可能該說法不是很嚴謹,但是我個人暫時是這么理解的。

1. 哪一些情況下,瀏覽器會發送get請求

a. 直接在瀏覽器地址欄輸入某個地址

b. 點擊鏈接

c. 表單默認的提交方式

2.特點:

a.???請求參數會添加到請求資源路勁的后面,只能添加少量參數

b.???請求參數會顯示在瀏覽器地址欄,路由器會記錄請求地址

5:@PostMapping

1. 哪一些情況下,瀏覽器會發送post請求

a.???設置表單method = "post"

2.特點:

a. 請求參數添加到實體內容里面,可以添加大量的參數(也解釋了為什么瀏覽器地址欄不能發送post請求,在地址欄里我們只能填寫URL,并不能進入到Http包的實體當中)

b. 相對安全,但是,post請求不會對請求參數進行加密處理(可以使用https協議來保證數據安全)。

6:RequestBody

如果傳輸的是單層json對象,我們后臺可以直接用?@RequestParam接收

$.ajax({

???type :?"post",

???dataType :?"json",

???url :?"/testRequestBody",

???data:{

???????name:"韋德",

???????age:35

??? },

???success : function(result) {

??? }

});

@RequestMapping("/testRequestBody")

public?String testRequestBody(@RequestParamMap<String, Object> map) {

? System.out.println(map);// {name=韋德, age=35}

??return"index";

}

如果傳輸的是多層嵌套json對象,這個時候會就會出現數據丟失問題

@RequestBody很好的解決了這個問題,它會把前臺傳輸過來的json轉化為后臺對應的對象

$.ajax({

???type :?"post",

???dataType :?"json",

???url :?"/testRequestBody",

???contentType:"application/json",??

???data:JSON.stringify({

???????name:"韋德",

???????win:[2006,2012,2013],

???????age:35

???}),

???success : function(result) {

??? }

});

@RequestMapping("/testRequestBody")

public?StringtestRequestBody(@RequestBodyMap<String, Object> map) {

? System.out.println(map);//{name=韋德, win=[2006, 2012, 2013], age=35}

??return"index";

}

需要注意的是前臺需要指定contentType為"application/json"

同時要把json對象轉化為String,否則后臺不能識別

7:@ResponseBody

@ResponseBody注解到方法上,直接傳回結果(字符串)

ajax請求返回json格式,往常我們這樣做

privatevoid?writeJson(HttpServletResponseresponse,Object?object) {

? String json =JSON.toJSONString(object);

? response.setCharacterEncoding("UTF-8");

?response.setContentType("application/json; charset=utf-8");

?PrintWriter?out?=?null;

??try?{

????out?= response.getWriter();

????out.write(json);

? }?catch?(IOException e) {

???e.printStackTrace();

? }?finally?{

????if?(out?!=?null) {

??????out.close();

??? }

? }

}

這個時候?@ResponseBody就派上用場了,只需要一個注解,全部搞定

$.ajax({

???type :?"post",

???dataType :?"json",

???url :?"/testResponseBody",

???success : function(result) {

???????console.info(result);

??? }

});

@RequestMapping("/testResponseBody")

@ResponseBody

public?Map<String, Object>testRequestBody(){

? Map<String,Object> result =?new?HashMap<String,Object>();

? result.put("name",?"韋德");

? result.put("age",?35);

??return?result;

}

前臺console輸出

{

????"age":?35,

????"name":?"韋德"

}

說一些個人的看法,非技術層面上的,一個 API 何時用 GET、POST 甚至 PUT 請求。

首先引入一個副作用的概念,副作用指當你發送完一個請求以后,網站上的資源狀態沒有發生修改,即認為這個請求是無副作用的。比如注冊用戶這個請求是有副作用的,獲取用戶詳情可以認為是無副作用的。

再引入一個冪等性的概念,冪等是說,一個請求原封不動的發送N次和M次(N不等于M,N和M都大于1)服務器上資源的狀態最終是一致的。比如發貼是非冪等的,重放10次發貼請求會創建10個帖子。修改帖子內容是冪等的,一個修改請求重放無論多少次,帖子最終狀態都是一致的。(前提是同一個修改操作重復10次)

嘮叨了這么多,回過頭來,何時用 PUT POST GET DELETE:

GET:無副作用,冪等
PUT:副作用,冪等
POST:副作用,非冪等
DELETE:副作用,冪等

這么看的話,DELETE 和 PUT 請求好像毫無區別。為了進一步區分這些請求方式的應用場景,我們再引入一個技術特性,request body,就是大家廣為流傳的 "POST 請求傳輸數據量比較大“ 這一說法的來源。

POST/PUT 請求可以通過傳遞 request body 來發送大量的數據,而 GET/DELETE 不能。

所以上面的表格需要再加一項:

GET:無副作用,冪等,不可帶 Request Body
PUT:副作用,冪等,可以帶 Request Body
POST:副作用,非冪等,可以帶 Request Body

DELETE:副作用,冪等,不可帶 Request Body

?

2)??params,headers

params:

????? 指定request中必須包含某些參數值,才讓該方法處理。

headers:

????? ?指定request中必須包含某些指定的header值,才能讓該方法處理請求。

3)? consumes,produces

consumes:

指定處理請求的提交內容類型(Content-Type),例如application/json,text/html;?

produces:

指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回;

2:@PathVariable

????? 用于將請求URL中的模板變量映射到功能處理方法的參數上,即取出uri模板中的變量作為參數。如:

3:?@RequestParam

@RequestParam主要用于在SpringMVC后臺控制層獲取參數,類似一種是request.getParameter("name"),

它有三個常用參數:defaultValue = "0", required = false,value="isApp";

defaultValue 表示設置默認值,required通過boolean設置是否是必須要傳入的參數,value 值表示接受的傳入的參數類型。

形式如項目中的:

public ObjectuserMemberShop(@RequestParam(required= false,value="corpId")IntegercorpId,

????????????????@RequestParam("uid")Longuid){

??? }

?


參考一篇文章,其中講了@controller、@service、@repository注解,自己復制下再總結下自己的一些想法。

如果一個類帶了@controller、@service、@repository注解,將自動注冊到Spring容器,不需要再在applicationContext.xml文件定義bean了。

首先:

Controller層使用@Controller注解

Service層使用@Service注解

Dao層使用@Repository注解

?

@Controller可注解于類上,聲明該類為SpringMVC的Controller對象。

簡單說:被@Controller注解的類是一個控制器,該類的方法是相應的動作。

@Service可注解于類上,

簡單說:

1.聲明該類是一個bean。如 @Service

@Scope("prototype")

public class Zoo

2.Zoo.java在bean中的id是"zoo",即類名且首字母小寫

?

例:@Service("userService")注解是告訴Spring,當Spring要創建UserServiceImpl的的實例時,bean的名字必須叫做"userService",這樣當Action需要使用UserServiceImpl的的實例時,就可以由Spring創建好的"userService",然后注入給Action。
dao層使用@repository注解

@Repository可注解于類上,

?

@Repository(value="userDao")注解是告訴Spring,讓Spring創建一個名字叫“userDao”的UserDaoImpl實例。
當Service需要使用Spring創建的名字叫“userDao”的UserDaoImpl實例時,

就可以使用@Resource(name = "userDao")注解告訴Spring,Spring把創建好的userDao注入給Service即可。

總結

以上是生活随笔為你收集整理的框架:SpringMVC常用注解总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。