パラメータを取得するには春の様々な方法

  • ハンドラメソッドをバインディング次パラメータデータに要求データが使用されているどのような状況注釈の使用。

要約:

ハンドラメソッドは、一般的にバインディングアノテーションパラメータを使用、我々は)彼らは上:(一般的なタイプ主に扱う四つのカテゴリーのリクエストの内容に応じて、一部分割しました

A、処理部要求URIが(URIテンプレートは、本明細書では変数を除くのqueryString部としての)注釈:@PathVariable ;
B、アノテーション処理要求ヘッダの一部:@RequestHeader@CookieValue ;
C、アノテーション処理要求本体部:@ RequestParam、@RequestBody ;
D、処理タイプ属性注釈:@SessionAttributes、@ModelAttribute。

1、@PathVariable

@RequestMapping URIを使用する場合、この時点でのテンプレートのスタイル・マッピング、すなわちsomeUrl / {}はparamIdは、その上を通過するように、プロセスパラメータ値に@PathvariableはparamId注釈によって結合されてもよいです。
サンプルコード:

@Controller  
@RequestMapping("/owners/{ownerId}")  
public class RelativePathUriTemplateController {  
  
  @RequestMapping("/pets/{petId}")  
  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {      
    // implementation omitted  
  }  
}

上記のコードは変数のpetId値は、メソッドのパラメータにバインドされたURIテンプレートを、OWNERID。URIテンプレート変数名やメソッドのパラメータの名前ではないバインドする必要がある場合は、@PathVariable(「名前」)に名前URIテンプレートを指定する必要があります。

2、@ RequestHeader、@にcookievalue

@RequestHeader注釈は、メソッドのパラメータにバインドされた値は要求ヘッダー部分を要求することができます。

サンプルコード:

これは、リクエストのヘッダ部です。

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)  {  
  
  //...  
  
}  

上記のコードは、コードのパラメータにバインドされたリクエストヘッダ部分を、符号化受け入れ、キープアライブヘッダ値の値は、パラメータキープアライブに結合されます。

@CookieValueは、メソッドのパラメータにバインドされたクッキーにヘッダ値を要求することができます。

クッキー値、例えば、次の
JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84
結合パラメータコード:

@RequestMapping("/displayHeaderInfo.do")  
public void displayHeaderInfo(@CookieValue("JSESSIONID") String cookie)  {  
  
  //...  
  
}  

これは、パラメータJSESSIONIDクッキーの値にバインドされています。

3、@ RequestParam、@RequestBody

@RequestParam

Request.getParameter(によって、結合の単純型を処理するために使用されるA))得られた文字列が単純型(ストリング]>コンバータConversionServiceの構成により行わ動作)を切り替えるの単純型の場合に直接変換することができ、使用の要求を.getParameter()モード取得パラメータは、実施の形態では、本体データの後処理値であってもよいし、処理された値のqueryString実施形態を得ることが可能です。

コンテンツタイプを処理するためのB):コンテンツアプリケーション/ x-www-form-urlencodedでエンコードされた提出GET、POST。

C)アノテーションは、二つの属性があります値、必須と、値は、パラメータがバインドされなければならないかどうかを示すために必要な名前に渡されたID値を指定し、
サンプルコード:

@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のためのないアプリケーション/ x-www-form-urlencodedでコンテンツ符号化、アプリケーション/ XMLなど;

それはHttpMessageConverters HandlerAdapterを用いて構成した後のデータ本体を解決することですし、適切なBeanに結合しました。

なぜなら配置さFormHttpMessageConverter、MultiValueMap <文字列、文字列>、この場合、特定の特別な要件の使用、詳細に置かれ処理されたアプリケーション/ x-www-form-urlencodedで結果のコンテンツを処理するために使用することができるようにビューFormHttpMessageConverterのAPI。

サンプルコード:

@RequestMapping(value = "/something", method = RequestMethod.PUT)  
public void handle(@RequestBody String body, Writer writer) throws IOException {  
  writer.write(body);  
}  

4、@ SessionAttributes、@ModelAttribute

@SessionAttributes:

中のプロセスパラメータで使いやすいオブジェクトのHttpSessionバインディングの属性値の注釈、。
ノートには、名前とタイプで使用される属性オブジェクトを指定することができ、値、タイプの2つのプロパティを持っています。

サンプルコード:

@Controller  
@RequestMapping("/editPet.do")  
@SessionAttributes("pet")  
public class EditPetForm {  
    // ...  
}  

@ModelAttribute

注釈は2つの用途は、パラメータのための1つの方法を有します。

方法で使用される場合:通常使用さ@RequestMapping、モデルバインディング必要、背景からの要求を処理する前に。

パラメータが使用される場合:名前によって対応する、パラメータ名注釈Beanに対応する値を結合する;値から結合します。

A)で@SessionAttributesは、属性オブジェクトを使用可能に。

B)指定されたメソッドのため@ModelAttributeモデルオブジェクト。

2例以上のC)は、新しい新しいBeanがバインドされるオブジェクト、および対応して名前によって要求は、Beanに値をバインドするために、何時々ありません。

の方法で使用するサンプルコードを@ModelAttribute。

// Add one attribute  
// The return value of the method is added to the model under the name "account"  
// You can customize the name via @ModelAttribute("myAccount")  
  
@ModelAttribute  
public Account addAccount(@RequestParam String number) {  
    return accountManager.findAccount(number);  
}  

このアプローチの実際の効果は、の@RequestMapping前にリクエストオブジェクトのput(「アカウント」、アカウント)のためのモデルメソッド呼び出しです。

パラメータに使用されるサンプルコードを@ModelAttribute。

@RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST)  
public String processSubmit(@ModelAttribute Pet pet) {  
     
}  

値がない場合、メソッドレベル@ModelAttributeは、ペットオブジェクトを結合するかどうかではないクエリは各属性のペットにバインドされたオブジェクトの対応する名前に応じてURIテンプレートであろう場合は、最初のクエリペットの結合するかどうか@SessionAttributesオブジェクト。

公開された53元の記事 ウォン称賛13 ビュー2267

おすすめ

転載: blog.csdn.net/qq_36821220/article/details/103295103