handler methodパラメータバインドでよく使用される注記


概要:
handler methodパラメータは一般的な注釈をバインドし、彼らが処理したRequestの異なる内容部分によって4種類に分けられます:(主に一般的なタイプを説明します)
A、requet uri部分(ここではuri templateのvariableを指し、queryString部分を含まない)を処理する注記:@PathVariable;
B、request header部分を扱う注記:@RequestHeader,@CookieValue;
C、request body部分を扱う注記:@RequestParam,@RequestBody;
D、処理attributeタイプは注記:@SessionAttributes,@ModelAttribute;
1、 @PathVariable
@RequestMapping URI templateスタイルを使用してマッピングされる場合、someUrl/{paramId}のparamIdは、@Pathvariable注記によってメソッドのパラメータに伝達された値をバインドすることができる.
サンプルコード:
[java] view plaincopyprint?
@Controller  

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

public class RelativePathUriTemplateController {  



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

  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {      

    // implementation omitted   

  }  

}  

上のコードはURI templateの変数ownerIdの値とpetIdの値をメソッドのパラメータにバインドします.メソッドパラメータ名とバインドするuri templateで変数名が一致しない場合は、@PathVariable("name")でuri templateの名前を指定する必要があります.
2、 @RequestHeader、@CookieValue
@RequestHeader注記は、Requestリクエストheader部分の値をメソッドのパラメータにバインドできます.
サンプルコード:
Requestのheaderセクションです.
Host                    localhost:8080  

Accept                  text/html,application/xhtml+xml,application/xml;q=0.9  

Accept-Language         fr,en-gb;q=0.7,en;q=0.3  

Accept-Encoding         gzip,deflate  

Accept-Charset          ISO-8859-1,utf-8;q=0.7,*;q=0.7  

Keep-Alive              300  

@RequestMapping(“/displayHeaderInfo.do”)  

public void displayHeaderInfo(@RequestHeader(“Accept-Encoding”) String encoding,  

                              @RequestHeader(“Keep-Alive”) long keepAlive)  {  

}  

上のコードは、request header部分のAccept-Encodingの値をパラメータencodingにバインドし、Keep-Alive headerの値をパラメータkeepAliveにバインドします.
@CookieValueは、Requestヘッダのcookieに関する値をメソッドのパラメータにバインドできます.
たとえば、次のCookie値があります.
JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84 

パラメータバインドのコード:
@RequestMapping(“/displayHeaderInfo.do”)  

public void displayHeaderInfo(@CookieValue(“JSESSIONID”) String cookie)  {  

}  

つまり、JESSIONIDの値をパラメータクッキーにバインドします.
3、@RequestParam, @RequestBody
@RequestParam
A)Request.getParameter()で取得したStringを単純タイプに直接変換できる場合(String->単純タイプの変換操作はConversionServiceで構成された変換器で行います).requestを使うからです.getParameter()方式でパラメータを取得するので、get方式でqueryStringの値を処理したり、post方式でbody dataの値を処理したりすることができます.
B)Content-type:アプリケーション/x-www-form-urlencoded符号化のためのコンテンツを処理するためのコミット方式GET、POST;
C)この注釈には2つの属性がある:value、required;valueは、入力する値のid名を指定し、requiredはパラメータがバインドされる必要があるかどうかを示すために使用されます.
サンプルコード:
@Controller  

@RequestMapping(“/pets”)  

@SessionAttributes(“pet”)  

public class EditPetForm {  

    @RequestMapping(method = RequestMethod.GET)  

 public String setupForm(@RequestParam(“petId”) int petId, ModelMap model) {  

       Pet pet = this.clinic.loadPet(petId);  

   model.addAttribute(“pet”, pet);  

   return “petForm”;  

   }  

@RequestBody
この注記は、アプリケーション/json、アプリケーション/xmlなど、アプリケーション/x-www-form-urlencoded符号化されたコンテンツではないContent-Typeを処理するためによく使用されます.
HandlerAdapter構成のHttpMessageConvertersを使用してpost data bodyを解析し、対応するbeanにバインドします.
FormHttpMessageConverterが配置されているので、アプリケーション/x-www-form-urlencodedの内容を処理し、処理した結果を1つのMultiValueMapに置くこともできます