生活随笔
收集整理的這篇文章主要介紹了
【Spring MVC 之应用篇】3_SpringMVC常见注解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. @RequestParam
- 2. @RequestBody
- 3. @PathVariable
- 4. @ModelAttribute
- 5. @SessionAttributes
1. @RequestParam
功能&屬性介紹
作用:
把請求中指定名稱的參數賦值給控制器中的形式參數
屬性:
value:請求參數中的名稱
required:請求參數中是否必須提供此參數。默認值 true 必須提供
實現測試
編寫一個新的前端頁面
<%--Created by IntelliJ IDEA.User: dellDate: 2020/10/6Time: 12:50To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<a href="/anno/testRequestParam?name=ffideal&pwd=123456">開始跳轉</a>
</body>
</html>
在后端編寫新的 controller
@RequestMapping("/testRequestParam")
public String
testRequestParam(@RequestParam("name") String username
,@RequestParam("pwd") String password
){System
.out
.println(username
);System
.out
.println(password
);return "/success";
}
2. @RequestBody
功能&屬性介紹
作用:
用于獲取請求體內容。直接使用得到是 key=value&key=value…結構的數據。但是,get 請求方式不適用。
屬性:
required:
是否必須有請求體。默認值是:true。
當取值為 true 時,get 請求方式會報錯。
如果取值為 false,get 請求得到是 null。
實現測試
首先在前端頁面編寫測試請求
<%--RequestBody的post請求--%>
<form action="/anno/testRequestBody" method="post">姓名:<input type="text" name="uname"/> <br>密碼:<input type="text" name="upassword"/> <br>價格:<input type="text" name="price"/> <br>生日:<input type="text" name="birthday"/> <br><input type="submit" value="提交">
</form><a href="/anno/testRequestBody?body=test" methods="get">RequestBody的get請求</a>
在 controller 層編寫邏輯處理
@RequestMapping("/testRequestBody")
public String
testRequestBody(@RequestBody(required
= false) String body
){System
.out
.println(body
);return "/success";
}
3. @PathVariable
功能&屬性介紹
作用:
用于綁定 url 中的占位符。例如:請求 url 中 /delete/{score},這個 {score} 就是 url 占位符。
屬性:
value:用于指定 url 中占位符名稱。
required:是否必須提供占位符。
實現測試
首先在前端頁面編寫測試請求
<a href="/anno/testPathVariable/452">@PathVariable 注解</a> <br>
在 controller 層編寫邏輯處理
@RequestMapping("/testPathVariable/{score}")
public String
testPathVariable(@PathVariable(value
= "score") Integer score
){System
.out
.println(score
);return "/success";
}
運行結果
4. @ModelAttribute
功能&屬性介紹
作用:
出現在方法上,表示當前方法會在控制器的方法執行之前,先執行。它可以修飾沒有返回值的方法,也可以修飾有具體返回值的方法。出現在參數上,獲取指定的數據給參數賦值。
屬性:
value:用于獲取數據的 key。key 可以是 POJO 的屬性名稱,也可以是 map 結構的 key。
應用場景:
當表單提交數據不是完整的實體類數據時,保證沒有提交數據的字段使用數據庫對象原來的數據。
例如:
我們在編輯一個用戶時,用戶有一個創建信息字段,該字段的值是不允許被修改的。在提交表單數據是肯定沒有此字段的內容,一旦更新會把該字段內容置為 null,此時就可以使用此注解解決問題。
實現測試1:修飾沒有返回值的方法
首先在前端頁面編寫測試請求
<a href="/anno/testModelAttribute?uname=ffideal">@ModelAttribute 注解</a> <br>
在 controller 層編寫邏輯處理
@ModelAttribute
public void showModel(Consumer consumer
){System
.out
.println("被@ModelAttribute修飾的方法:" + consumer
.getUname());
}@RequestMapping("testModelAttribute")
public String
testModelAttribute(Consumer consumer
){System
.out
.println("testModelAttribute的方法:" + consumer
.getUname());return "/success";
}
運行結果1
實現測試2:修飾有具體返回值
首先在前端頁面編寫測試請求
<form action="/anno/updatePassword" method="post">姓名:<input type="text" name="uname"/> <br>密碼:<input type="text" name="upassword"/> <br>價格:<input type="text" name="price"/> <br>生日:<input type="text" name="birthday"/> <br><input type="submit" value="提交">
</form>
在 controller 層編寫邏輯處理
private Consumer
simulateDB(String username
){Consumer consumer
= new Consumer();consumer
.setUname("ffideal");consumer
.setUpassword("123456");consumer
.setPrice(BigDecimal
.valueOf(3.14));return consumer
;
}
@ModelAttribute
public Consumer
showConsumer(String username
){Consumer consumer
= simulateDB(username
);System
.out
.println("Model 輸出原始的數據" + consumer
);return consumer
;
}
@RequestMapping("updatePassword")
public String
updatePassword(Consumer consumer
){System
.out
.println("updatePassword中的Consumer對象值:" + consumer
);return "/success";
}
運行結果2
實現測試3:出現在參數上
前端請求與 實現測試2 相同,在 controller 層編寫邏輯處理
private Consumer
simulateDB(String username
){Consumer consumer
= new Consumer();consumer
.setUname("ffideal");consumer
.setUpassword("123456");consumer
.setPrice(BigDecimal
.valueOf(3.14));return consumer
;
}
@ModelAttribute
public void showConsumer2(String username
, Map
<String, Consumer> map
){Consumer consumer
= simulateDB(username
);System
.out
.println("Model 輸出原始的數據" + consumer
);map
.put("consumer", consumer
);
}
@RequestMapping("updatePrice")
public String
updatePassword2(@ModelAttribute("consumer") Consumer consumer
){System
.out
.println("updatePassword中的Consumer對象值:" + consumer
);return "/success";
}
運些結果3
5. @SessionAttributes
功能&屬性介紹
作用:
用于多次執行控制器方法間的參數共享。
屬性:
value:用于指定存入的屬性名稱
type:用于指定存入的數據類型
實現測試
首先在前端頁面編寫測試請求
<a href="/session/setSessionAttribute">設置SessionAttribute</a><br>
<a href="/session/getSessionAttribute">獲取SessionAttribute</a><br>
<a href="/session/delSessionAttribute">刪除SessionAttribute</a><br>
在 controller 層編寫邏輯處理
@Controller
@RequestMapping("session")
@SessionAttributes(value
= {"uname","upassword","price"},types
= {Integer
.class})
public class SessionAttributeController {@RequestMapping("setSessionAttribute")public String
setSessionAttribute(Model model
){model
.addAttribute("uname","ffideal");model
.addAttribute("upassword","654321");model
.addAttribute("price", BigDecimal
.valueOf(3.13));System
.out
.println("setSessionAttribute設置完畢 ....");return "/success";}@RequestMapping("getSessionAttribute")public String
getSessionAttribute(ModelMap model
){System
.out
.println("昵稱:" + model
.get("uname") + ",密碼:" + model
.get("upassword") + ",價格:" + model
.get("price"));return "/success";}@RequestMapping("delSessionAttribute")public String
delSessionAttribute(SessionStatus status
){status
.setComplete();System
.out
.println("setSessionAttribute 清除完畢 ....");return "/success";}
}
運些結果
總結
以上是生活随笔為你收集整理的【Spring MVC 之应用篇】3_SpringMVC常见注解的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。