SpringMVC 經常使用註解的使用和解釋

1. @RequestMappinghtml

  RequestMapping是一個用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的全部響應請求的方法都是以該地址做爲父路徑。java

  RequestMapping註解有六個屬性,下面咱們把她分紅三類進行說明(下面有相應示例)。json

  一、 value, method;app

   value:     指定請求的實際地址,指定的地址能夠是URI Template 模式(後面將會說明);spa

   method:  指定請求的method類型, GET、POST、PUT、DELETE等;debug

   二、consumes,produceshtm

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

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

   三、params,headersio

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

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

 

2. @PathVariable

  取出@RequestMapping中uri中的變量做爲參數。

@Controller
@RequestMapping ( "/test/{variable1}" )
public class MyController {

    @RequestMapping ( "/showView/{variable2}" )
    public ModelAndView showView( @PathVariable String variable1, @PathVariable ( "variable2" ) int variable2) {
       ModelAndView modelAndView = new ModelAndView();
       modelAndView.setViewName( "viewName" );
       modelAndView.addObject( " 須要放到 model 中的屬性名稱 " , " 對應的屬性值,它是一個對象 " );
       return modelAndView;
    }
}

上面的例子中,使用@PathVariable有指定名字和沒指定兩種方式,那麼這兩種方式有什麼區別嗎:第一種狀況就默認去URI 模板中找跟參數名相同的變量,可是這種狀況只有在使用debug 模式進行編譯的時候才能夠,而第二種狀況是明確規定使用的就是URI 模板中的variable2 變量。當不是使用debug 模式進行編譯,或者是所須要使用的變量名跟參數名不相同的時候,就要使用第二種方式明確指出使用的是URI 模板中的哪一個變量。

3. 使用 @RequestMapping 的一些高級用法

  一、params屬性

@RequestMapping (value= "testParams" , params={ "param1=value1" , "param2" , "!param3" })
    public String testParams() {
       System. out .println( "test Params..........." );
       return "testParams" ;
}

用@RequestMapping 的params 屬性指定了三個參數,這些參數都是針對請求參數而言的,它們分別表示參數param1 的值必須等於value1 ,參數param2 必須存在,值無所謂,參數param3 必須不存在,只有當請求/testParams.do 而且知足指定的三個參數條件的時候才能訪問到該方法。因此當請求/testParams.do?param1=value1&param2=value2 的時候可以正確訪問到該testParams 方法,當請求/testParams.do?param1=value1&param2=value2&param3=value3 的時候就不可以正常的訪問到該方法,由於在@RequestMapping 的params 參數裏面指定了參數param3 是不能存在的。

  二、method屬性

@RequestMapping (value= "testMethod" , method={RequestMethod. GET , RequestMethod. DELETE })
    public String testMethod() {
       return "method" ;
}

在上面的代碼中就使用method 參數限制了以GET 或DELETE 方法請求/testMethod 的時候才能訪問到該Controller 的testMethod 方法。

  三、headers屬性

@RequestMapping (value= "testHeaders" , headers={ "host=localhost" , "Accept" })
    public String testHeaders() {
       return "headers" ;
}

headers 屬性的用法和功能與params 屬性類似。在上面的代碼中當請求/testHeaders.do 的時候只有當請求頭包含Accept 信息,且請求的host 爲localhost 的時候才能正確的訪問到testHeaders 方法。

相關文章
相關標籤/搜索