Spring@RequestParam@Request Body@PathVarableなどのパラメータバインディングの説明

7324 ワード

引用:
プロジェクトでは常に各種パラメータが使われていますので、昨日は先端と機能が必要です.データを受け取る時にいくつかのパラメータを使って、時間がかかりました.
プロフィール:
  • request uri部分を処理します.                               注:@PathVarable; 
  • 処理request header部分                         注:@Request Header、@Cookie Value;
  • レキシストボディの部分を処理します.                            注:@Request Param、  @Request Body
  • 処理atributeタイプ                                   注:@Session Attributes、@ModelAttribute;
  • @PathVarable
    @Request Mapping URI templateを使用してマッピングすると、すなわちhttp://localhost:8080/demo/{paramId}この時のparamIdは@Pathvariableによってくくり付けられ、それが伝えられた値を方法のパラメータに加えることができます.
    サンプルコード:
    @Controller  
    @RequestMapping("/owners/{paramId}")  
    public class RelativePathUriTemplateController {  
      
      @RequestMapping("/pets/{petId}")  
      public void findPet(@PathVariable String paramId, @PathVariable String petId, Model model) {      
        // implementation omitted  
      }  
    }  
    @Request Header、@Cookie Value
    @Request Header注解は、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-Enccodingの値をパラメータencodingに結び付けました.Keep-live headerの値はパラメータkeep Aliveに結び付けられます.
    @Cookie ValueはRequest headerの中のcookieに関する値を方法のパラメータに結び付けることができます.
    例えば、次のようなCookie値があります.
    [java]  view plin
     copy
    JSESSIONID=415 A 4 AC 178 C 59 DACE 0 B 2 C 9 CA 727 CDD 84   パラメータバインディングのコード:
    [java]  view plin
     copy
    @Request Mapping('/displayHeaderInfo.do)   public void displayHeader Info(@Cookie Value(「JSESSIONID」) String クッキー)  {        //...      )   JSESSIONIDの値をパラメータクッキーに結び付けます.
    @Request Param、@Request Body
    @Request Param 
    1、簡単なタイプのバインディングを一般的に処理し、Request.getParameeter()によって取得されたStringを直接簡単なタイプに変換することができる場合(String->簡単なタイプの変換操作はCoversion Serviceによって構成された変換器で行うことができる).request.get Parameeter()方式でパラメータを取得するので、get方式のqueryStringの値を処理しても良いし、post方式のbody dataの値を処理しても良いです.
    2、コンテント-Typeを処理するために使用されます.  application/x-www-form-urlencoded符号化の内容、提出方式GET、POST.
    3、この注釈には二つの属性があります.value、required.valueは着信値のID名を指定し、パラメータがバインディングされているかどうかを示すためにrequiredを使用します.
    サンプルコード:
    [java]  view plin
     copy
    @Controller   @Request Mapping(「/pets」)   @Session Attributes(「pet」)   public クラス EditPet Form {           @Request Mapping = Request Method.GET)       public String setupForm(@Request Param(「petId」) 要点 petId、 ModelMap モデル {           ピート pet = this.clinic.loadPet(petId)           model.addAttribute(「pet」、 pet)           return 「petForm」       }          // ...   @Request Body
    1、この注釈は常にContentt-Typeを処理するために用いられる.application/x-www-form-urlencoded符号化された内容ではなく、例えば、appication/json、appication/xmlなど.
    2、HandlerAdapter構成のHttpMessageConvertersを使用してpost data bodyを解析し、対応するbeanにバインドする.
    3、実はこれも@Request Body String jsonを受け取ることができます.@Request Body  Map mapは、受信文字列が最も原始的ですが、利用可能性はそれほど大きくないと思います.一般的に配置ファイル(文末添付)に作成されています.json文字列は直接mapまたはclassに変換できます.
    サンプルコード:
    public class AdminStaff  {//     
    
    	private String mobile;
    	private String password;
    	private String email;
    }
     var staff = new Object();//  js   
          staff.mobile = this.usermobile;
          staff.password = this.userpass;
          // this.$router.push('/')
          this.$http.post('http://localhost/huihui-admin/login', JSON.stringify(staff) ).then()
    [java]  view plin
     copy
    @Request Mapping(value) = 「/something」)   public void handle(@Request Body) Adminstaff staffModel){      //  )   ここでちょっと説明します.
    @Request Bodyが受けるべきパラメータはstring化されたjsonであり、key=valueという表記は要求urlに含まれてはいけません.すべての要求パラメータはjsonです.ここではJSON.stingify(json)という方法を直接使って転化します.
    もう一つ大事なのがあります.
    ここでは、@Request Body String mobile@Request Body String passwordは、私もずっとnullでした.
    @Session Attributes、@ModelAttribute
    @Session Attributes:
    この注釈はHttpSessionの中のatributeオブジェクトの値を結びつけるために用いられ、方法中のパラメータで使用しやすい.
    この注釈はvalue、typesの2つの属性があり、名前とタイプによって使用するatributeオブジェクトを指定できます.
    サンプルコード:
    [java]  view plin
     copy
    @Controller   @Request Mapping('/edit Pet.do)   @Session Attributes(「pet」)   public クラス EditPet Form {       // ...   )   @ModelAttribute
    この注釈は2つの用法があり、一つは方法に用いられ、一つはパラメータに用いられる.
    方法に使う時:  通常は@Request Mappingを処理する前に、バインディングを要求するためにバックグラウンドから照会するmodelが必要である.
    パラメータに使用する場合:名前に対応して、該当する名前の値を注釈のパラメータbeanに結びつけるために使用します.結合する値は以下の通りです.
    1、@Session Attributesで有効にされているatributeの対象に;
    2、@ModelAttributeはメソッド上で指定されたmodelオブジェクトに使用されます.
    3、上記の2つの状況がない場合、newはバインディングされたbeanオブジェクトを一つ必要とし、その後、requestの名前に対応する方法で、値をbeanにバインドする.
    使用方法上@ModelAttributeの例コード:
    [java]  view plin
     copy
    // Add one atribute   // The return value 保存先 the method is added ト the モデル アンダー?デ the name 「account」   // You can customize the name via @ModelAttribute(「myAccent」)      @ModelAttribute   public Acceount addAcceount(@Request Param String number {       return account Manager.findAcceount(number);   )   この方法の実際の効果は、@Request Mappingのメソッドを呼び出す前に、requestオブジェクトのmodel里put(「account」、Acceount)です.
    パラメータに使用する@ModelAttributeの例コード:
    [java]  view plin
     copy
    @Request Mapping(value="/owners/{weners}/pets/{petId}/edit} method = Request Method.POST)   public String processSubmit(@ModelAttribute) ピート pet) {         )   まず、@Session AttributesにバインディングされているPetオブジェクトがあるかどうかを調べ、ない場合は@ModelAttributeメソッドレベルでPetオブジェクトがバインディングされていますか?ない場合はURI templateの値を対応する名前でPetオブジェクトの各属性に結び付けます.
    補足解説:
    問題:注釈が与えられていない場合、パラメータはどのように結合されますか?
    バインディングするオブジェクトの場合、簡単なタイプ:  @Request Paramを呼び出して処理します.  
    バインディングするオブジェクトの場合、複雑なタイプ:  @ModelAttributeを呼び出して処理します.
    ここでの簡単なタイプとは、javaのオリジナルタイプ(bolean,intなど)、元のタイプのオブジェクト(Boolean,Intなど)、String,Dateなどを指します.Springは、直接Stringからターゲットオブジェクトに変換できるタイプです.
    原文の住所:http://blog.csdn.net/walkerjong/article/details/7946109/
    ===============================設定ファイル===============================================================================
    
    		
    			
    			
    			
    				
    					
    						application/json;charset=UTF-8
    						text/html;charset=UTF-8
    					
    				
    				 
    					 
    						WriteNullStringAsEmpty 
    						NotWriteDefaultValue