SpringMVC註解詳解
@Controller
@RequestMapping("/springmvc")
public class SpringMVCController {
@RequestMapping(value="/testMethord",method=RequestMethod.POST)
public String testMethord(){
System.out.println("testMethord...");
return "success";
}
}
說明:預設後面是get請求,如果為post請求,必須在請求頁面的method後面加post方式請求;(2) RequestMapping對映請求引數和請求頭: params: 指定request中必須包含某些引數值是,才讓該方法處理。 headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求。get方式請求: <a href="springmvc/testMethord">testMethord</a><br/><br/> post 方式請求: <form action="springmvc/testMethord" method="post"> <input type="submit" value="submit"> </form>
/*
可以使用 params 和 headers 來更加精確的對映請求. params 和 headers 支援簡單的表示式.
*/
@RequestMapping(value="/testParamsAndHeaders",
params={params={"username","age!=10"},
headers = { "Accept-Language=en-US,zh;q=0.8" })
public String testParamsAndHeaders(){
System.out.println("testParamsAndHeaders...");
return "success";
}
<!--設定請求引數和請求頭資訊 -->
<a href="springmvc/testParamsAndHeaders">testParamsAndHeaders</a>
(3) consumes,produces;
consumes:指定處理請求的提交內容型別(Content-Type),例如application/json, text/html;//方法僅處理request Content-Type為“application/json”型別的請求。
@Controller
@RequestMapping(value = "/pets", method = RequestMethod.POST, consumes="application/json")
public void addPet(@RequestBody Pet pet, Model model) {
// implementation omitted
}
produces: 指定返回的內容型別,僅當request請求頭中的(Accept)型別中包含該指定型別才返回;//方法僅處理request請求中Accept頭中包含了"application/json"的請求,同時暗示了返回的內容型別為application/json;
@Controller
@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, produces="application/json")
@ResponseBody
public Pet getPet(@PathVariable String petId, Model model) {
// implementation omitted
}
(4) RequestMapping對映請求佔位符PathVariable註解:
通過 @PathVariable 可以將 URL 中佔位符引數繫結到控制器處理方法的入參中:①定義控制器方法
/*
@PathVariable 註解可以將請求URL路徑中的請求引數,傳遞到處理請求方法的入參中
*/
@RequestMapping(value="/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id){
System.out.println("testPathVariable...id="+id);
return "success";
}
②請求連結
<!-- 測試 @PathVariable -->
<a href="springmvc/testPathVariable/1">testPathVariable</a><br/><br/>
2.請求資料傳入註解:
(1) @RequestParam註解 :在處理方法入參處使用 @RequestParam 可以把請求引數傳遞給請求方法。
value:引數名
required:是否必須。預設為 true, 表示請求引數中必須包含對應的引數,若不存在,將丟擲異常
defaultValue: 預設值,當沒有傳遞引數時使用該值
①增加控制器方法@RequestMapping(value="/testRequestParam")
public String RequestParam(
@RequestParam(value="username") String username,
@RequestParam(value="age",required=false,defaultValue="0") Integer age
){
System.out.println("username="+username+"----"+"age="+age);
return "success";
}
②增加頁面連結<a href="springmvc/testRequestParam?username=tom&age=10">testRequestParam</a>
(2) @RequestHeader:對映請求頭資訊
①增加控制器方法@RequestMapping(value="/testRequestHeader")
public String testRequestHeader(@RequestHeader(value="Accept-Language") String abc){
System.out.println("testRequestHeader - Accept-Language:"+abc);
return "success";
}
②增加頁面連結<a href="springmvc/testRequestHeader">testRequestHeader</a>
(3) @CookieValue: 對映一個 Cookie值
① 增加控制器方法@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
System.out.println("testCookieValue: sessionId: " + sessionId);
return "success";
}
② 增加頁面連結<a href="springmvc/testCookieValue">testCookieValue</a>
(4) 使用pojo作為引數:使用 POJO 物件繫結請求引數值
Spring MVC 會按請求引數名和 POJO 屬性名進行自動匹配,自動為該物件填充屬性值。支援級聯屬性。
① 填加控制器方法、表單頁面@RequestMapping("/testPOJO")
public void testPOJO(User user){
System.out.println(user);
return "success";
}
② 增加頁面連結<!-- 測試pojo物件傳參,支援級聯屬性 -->
<form action="springmvc/testPOJO" method="post">
username:<input type="text" name="username"/><br>
password:<input type="password" name="password"><br>
email:<input type="text" name="email"/><br>
age:<input type="text" name="age"/><br>
city:<input type="text" name="address.city"/><br>
province:<input type="text" name="address.province"/>
<input type="submit" value="提交"/>
</form>
③ 如果有中文亂碼,在web.xml中需要配置字元編碼過濾器,且配置其他過濾器之前,否則不起作用。<!-- 配置字符集,解決中文亂碼問題 -->
<filter>
<filter-name> encodingFilter</filter-name >
<filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class>
<init-param>
<param-name> encoding</param-name >
<param-value> UTF-8</param-value >
</init-param>
<init-param>
<param-name> forceEncoding</param-name >
<param-value> true</param-value >
</init-param>
</filter>
<filter-mapping>
<filter-name> encodingFilter</filter-name >
<url-pattern> /*</url-pattern >
</filter-mapping>
3.響應資料傳出
SpringMVC中提供了以下幾種途徑輸出模型資料:
① ModelAndView: 處理方法返回值型別為 ModelAndView 時, 方法體即可通過該物件新增模型資料.
② Map 及 Model: 入參為 org.springframework.ui.Model、org.springframework.ui.ModelMap 或 java.uti.Map 時,處理方法返回時,Map 中的資料會自動新增到模型中。
③ @SessionAttributes: 將模型中的某個屬性暫存到 HttpSession 中,以便多個請求之間可以共享這個屬性。
④ @ModelAttribute: 方法入參標註該註解後, 入參的物件就會放到資料模型中
(1) 處理模型資料之 ModelAndView:
① 控制器處理方法的返回值如果為 ModelAndView, 則其既包含檢視資訊,也包含模型資料資訊。
② 新增模型資料:
MoelAndView addObject(String attributeName, Object attributeValue)
ModelAndView addAllObject(Map<String, ?> modelMap)
③設定檢視:
void setView(View view)
void setViewName(String viewName)
④實驗程式碼
a.增加控制器方法// 目標方法的返回型別可以是ModelAndView型別,其中包含檢視資訊和模型資料資訊.
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
System.out.println("testModelAndView");
String viewName = "success";
ModelAndView mv = new ModelAndView(viewName );
mv.addObject("time",new Date().toString()); //實質上存放到request域中
return mv;
}
b.增加頁面連結<!--測試 ModelAndView 作為處理返回結果 -->
<a href="springmvc/testModelAndView">testModelAndView</a>
c.增加成功頁面,顯示資料time: ${requestScope.time }
(2) 處理模型資料Map(方法的入參可以是Map,Model,ModelMap但是我們一般使用Map ):
①增加控制器方法// 目標方法的返回型別也可以是一個Map型別引數
@RequestMapping("testMap")
public String testMap(Map<String,Object> map){
System.out.println(map.getClass().getName());
//org.springframework.validation.support.BindingAwareModelMap
map.put("names", Arrays.asList("Tom","Jerry","Kite"));
return "success";
}
②增加頁面連結<!-- 測試 Map 作為處理返回結果 -->
<a href="springmvc/testMap">testMap</a>
③增加成功頁面,顯示結果names: ${requestScope.names }
注意:Map集合的泛型,key為String,Value為Object。
(3) 處理模型資料之 SessionAttributes 註解:
(1) 若希望在多個請求之間共用某個模型屬性資料,則可以在控制器類上標註一個 @SessionAttributes, Spring MVC 將在模型中對應的屬性暫存到 HttpSession 中。@SessionAttributes 除了可以通過屬性名指定需要放到會話中的屬性外,還可以通過模型屬性的物件型別指定哪些模型屬性需要放到會話中
例如:
① @SessionAttributes(types=User.class) 會將隱含模型中所有型別為 User.class 的屬性新增到會話中。
② @SessionAttributes(value={“user1”, “user2”})
③ @SessionAttributes(types={User.class, Dept.class}) ④ @SessionAttributes(value={“user1”, “user2”}, types={Dept.class}) (2).實驗程式碼:
@Controller
//@SessionAttributes("user")
@SessionAttributes(value={"user"},types={String.class})
public class SpringMVCController {
/**
* @SessionAttributes
* 除了可以通過屬性名指定需要放到會話中的屬性外(實際上是通過value指定key值),
* 還可以通過模型屬性的物件型別指定哪些模型屬性需要放到會話中(實際上是通過types指定型別)
* 注意:只能放在類的上面,不能修飾方法
*/
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Map<String,Object> map){
User user = new User(null,"Tom","123","[email protected]",22);
map.put("user", user);
map.put("school", "清華大學");
//預設是被存放到request 域,如果設定了@SessionAttribute註解,就同時存放到session域中
return "success";
}
}
<!--測試 @SessionAttribute 將資料存放到session域中 -->
<a href="testSessionAttributes">testSessionAttributes</a>
request user : ${requestScope.user } <br><br>
session user : ${sessionScope.user } <br><br>
request school : ${requestScope.school } <br><br>
session school : ${sessionScope.school } <br><br>
(4) @ModelAttribute註解:
① @ModelAttribute註解
|
|
<!--測試 @ModelAttribute 類似Struts2框架的模型驅動 -->
<!--
模擬修改操作:
1.原始資料為:1,Tom,123456,[email protected],12
2.密碼不需要修改
3.表單回顯,模擬操作直接在表單value屬性上賦值
-->
<form action="springmvc/testModelAttribute" method="POST">
<input type="hidden" name="id" value="1"><br>
username: <input type="text" name="username" value="Tom"/>
email: <input type="text" name="email" value="[email protected]"/>
age: <input type="text" name="age" value="12"/>
<input type="submit" value="Submit"/>
</form>
b.增加@ModelAttribute註解// 由 @ModelAttribute 標記的方法(getUser), 會在每個目標方法(testModelAttribute)執行之前被 SpringMVC 呼叫!
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
System.out.println("user="+user);
return "success";
}
@ModelAttribute
public void getUser(@RequestParam(value="id",required=false) Integer id,Map<String,Object> map){
if(id!=null){
//模擬從資料庫中獲取到的user物件
User user = new User(1,"Tom","123456","[email protected]",12);
System.out.println("從資料庫中查詢的物件:user="+user );
map.put("user", user);
}
}
③ @ModelAttribute註解之執行原理
a.執行@ModelAttribute註解所修飾的方法,將從資料庫中獲取的物件存放到Map集合中,key為userb.SpringMVC從Map集合中獲取 user物件,將表單資料封裝到與引數名稱對應的user物件屬性上
c.SpringMVC將user物件作為引數,傳遞給目標方法。 d.注意:@ModelAttribute 註解修飾的方法中,放入到Map集合中的key值,應該和目標方法引數型別的類名稱首字母小寫一致。
相關推薦
SpringMVC註解詳解——(持續更新)
@RequestMapping常見的可用引數如下: 1.value: 制定請求的地址,可以是URLTemplate模式;(value可以省略不寫)  
SpringMVC註解詳解
1.對映請求註解:@RequestMapping 標記在類上:提供初步的請求對映資訊。相對於WEB 應用的根目錄 標記在方法上:提供進一步的細分對映資訊。相對於標記在類上的
SpringMVC中的引數繫結註解詳解及其使用場景
我認為只有深刻地研究過人,才能創造出人物,如同只有認真地學習了一種語言才能講它一樣。——《茶花女》 0、引言 最近在寫一個介面的時候,採用put請求,接收引數時採用了兩個@requestparam接收。前端通過application/json傳來兩個引數,測
SpringMvc三層架構註解詳解@Controller、@Service和@Repository
1. @Controller控制層 2. @Service() 3. @Repository持久層 springvmc採用經典的三層分層控制結構,在持久層,業務層和控制層分別採用@Repository、@Service、@Controller對分層中
springmvc 引數繫結註解詳解
簡介 Handler method引數繫結常用的註解,我們根據它們處理request的不同內容部分來看主要分為四類: A. 處理requesr uri部分的註解,@PathVariable B. 處理 request header部分的註解,@RequestH
(轉)@RequestParam @RequestBody @PathVariable 等參數綁定註解詳解
erro 後綁定 false zip ons type() eba veh manager 引言: 接上一篇文章,對@RequestMapping進行地址映射講解之後,該篇主要講解request 數據到handler method 參數數據的綁定所用到的註解和什麽情形下使用
Spring中@Component註解,@Controller註解詳解(網摘)
tin ava 代碼 autowired reat control type imp 訪問 在使用Spring的過程中,為了避免大量使用Bean註入的Xml配置文件,我們會采用Spring提供的自動掃描註入的方式, 只需要添加幾行自動註入的的配置,便可以完成Servic
@Qualifier註解詳解
num fine ali factor BE comm alt nta expec @Qualifier註解意味著可以在被標註bean的字段上可以自動裝配。Qualifier註解可以用來取消Spring不能取消的bean應用。 下面的示例將會在Customer的person
springboot的註解詳解
ica prope pan span 配置 作用 cat fix 文件中 配置類相關: @PropertySource(value = "classpath:test.properties") //我們都把配置文件寫到application.yml中。有時我們不願意把
Sping框架中的註解詳解
例子 上下 troy getbean 用戶id 查找 oge 數據庫 配置 傳統的Spring做法是使用.xml文件來對bean進行註入或者是配置aop、事物,這麽做有兩個缺點:1、如果所有的內容都配置在.xml文件中,那麽.xml文件將會十分龐大;如果按需求分開.xml文
Spring MVC @RequestMapping註解詳解(2)
並不是 value get ecif 使用 .com java代碼 處理方法 分開 @RequestMapping 參數說明 value:定義處理方法的請求的 URL 地址。(重點) method:定義處理方法的 http method 類型,如 GET、POST
第一個SpringMVC程式詳解
建立一個java類: package com.myproject.cn; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org
JPA註解詳解及示例
文章出處:https://blog.csdn.net/zhengchao1991/article/details/70236919 1、用例項介紹JPA 使用JPA,肯定是有ORM的意思在裡面,當然我們首先要定義一個實體類(要將 Java 類指定為 JPA 實體,請使用 @Entity 批註
@GeneratedValue 註解詳解
springboot中@GeneratedValue作用: (1)、@GeneratedValue註解存在的意義主要就是為一個實體生成一個唯一標識的主鍵、@GeneratedValue提供了主鍵的生成策略。 (2)、@GeneratedValue註解有兩個屬性,分別是strategy和g
@Table 註解詳解
spring @Table註解 作用是 : 宣告此物件對映到資料庫的資料表,通過它可以為實體指定表(talbe) 常用的兩個屬性: 1、name 用來命名 當前實體類 對應的資料庫 表的名字 @Table(name = "tab_u
SwaggerAPI註解詳解,以及註解常用引數配置
官網github地址:https://github.com/swagger-api/swagger-core/wiki/Annotations-1.5.X 註解 @Api: 作用在類上,用來標註該類具體實現內容。表示標識這個類是swagger的資源 。 引數: 1
Java 註解詳解
一、什麼是註解 註解也叫元資料,例如我們常見的@Override和@Deprecated,註解是JDK1.5版本開始引入的一個特性,用於對程式碼進行說明,可以對包、類、介面、欄位、方法引數、區域性變數等進行註解 註解都預設繼承介面Annotation.jav
java元註解詳解
java中元註解有四個: @Retention @Target @Document @Inherited; @Retention:註解的保留位置 @Retention(RetentionPolicy.SOURCE) //註解僅
Java——註解詳解
Java註解同 classs 和 interface 一樣,註解也屬於一種型別。它是在 Java SE 5.0 版本中開始引入的概念。 註解的定義 通過 @interface 關鍵字進行定義。 public @interface TestAnnotation { } 這段程式碼就建立了一個名字為 Tes
SpringMVC FistMVC詳解
實現一個簡單的SpringMVC框架的配置 1.依賴 這是mybatis+spring+現在需要的依賴 <dependency> <groupId>junit</groupId> <ar