1. 程式人生 > >spring mvc引數繫結

spring mvc引數繫結

註解驅動控制器

@RequestMapping對映請求

通過標註@Controller,再通過<context:component-scan>掃描相應類包,即可使POJO成為一個可以處理請求的控制器。

Spring mvc通過@RequestMapping將請求對映到對應的控制器方法中

在控制器的類定義及方法定義處都可以標註@RequestMapping,類定義出提供初步的請求對映資訊,方法處提供進一步細分對映資訊。

@RequestMapping

Value:指定請求URL,在類定義處指定的URL相對於Web應用部署目錄,方法處指定URL相對於類定義處URL,支援ant風格(即?、*、**字元),和帶{xxx}佔位符的URL.

通過@PathVariable可以將URL中的佔位符引數繫結到方法入參中。

如:

@Controller

@RequestMapping(“/owners/{ownerId}”)

Public class RelativePathUriTemplateController{

         @RequestMapping(“/pets/{petId}”)

         publicvoid findPet(@PathVariable String ownderId,@PathVariable petId,Model model){

         ……

}

}

@RequestMapping的value、method、params、headers分別表示請求URL、請求方法、請求引數、及報文頭的對映條件,它們之間是與的關係,聯合使用多個條件可讓請求更精確。

pramas和heads分別通過請求引數及報文頭屬性進行對映,它們支援簡單表示式。

以params為例,headers可以參照prams

parama1:表示請求必須包含名為prama1的請求引數

!parama1:表示請求不能包含param1的請求引數

param1!=value1:表示請求包含名為param1引數,但其值不能為value

{param1=value1,param2}:請求必須包含名為param1和param2引數,並且param1值必須為value1

請求處理方法

使用@RequestParam繫結請求引數值

value:引數名

require:是否必須,表示請求必須包含對應引數名,不存在拋異常

public String handler1(@RequestParam(value=”username”,require=false)Stringusername

@RequestParam(“age”)intage){

         ……

}

使用@CookieValue繫結請求中的Cookie值

@CookieValue(value=”sessionId”,require=false)StringsessionId

使用@RequestHeader繫結請求報文頭屬性

@RequestHeader(“Accept-Encording”)Stringencording, @RequestHeader(”keep-Alive”)long alive

使用命令/表單物件繫結繫結請求引數

Spring mvc 會按請求引數名和命令/表單物件屬性名匹配方式,自動為該物件填充屬性值。

@RequestMapping(“/handler4”)

public String handler4(User user)

使用servlet api物件作為入參

使用servlet api類作為入參時,spring mvc會自動將web層對應的servlet API物件傳遞給處理方法入參,處理方法入參可同時使用其它符合要求的入參,位置順序無特殊要求。如果處理方法自行使用HttpServletResponse返回響應,則處理方法返回值需設定成void.

Spring mvc在org.springframework.web.context.request包下提供了若干個可代理Servlet原生API類的介面。如WebRequest、NativeWebRequest,它們允許作為處理類的入參,通過這些代理類可以訪問請求物件的任何資訊。

public void handler21(HttpServletRequestrequest,HttpServletResponse response){

}

public void handler22(HttpServletRequestrequest,HttpServletResponse response,

@RequestParam(“username”)Stringusername){

}

public String handler25(WebRequest request){

         Stringusername = request.getParameter(“username”);

         ……

}

使用IO物件作為入參

Servlet的ServletRequest擁有getInputStream()與getReader()方法,可以通過它們讀取請求資訊。相應servlet的servletResponse擁有getOutputStream()與getWriter()方法,可以通過它們輸出響應資訊。

spring mvc 允許控制器處理方法使用java.io.InputStream/java.io.Reader及java.io.OutputStream/java.io.Writer作為方法入參,springmvc將獲取ServletRequest相應方法傳遞給控制器處理方法。

public void handler31(OutputStream os)throwsIoException{

         Resourcerec = new ClassPathResource(“/image.jsp”);

         FileCopyUtils.copy(res.getInputStream(),os);

}

其它型別引數

java.util.Local,java.security.Principal