SpringMVC要求データカプセル化変換

5131 ワード

概要:
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注記によってメソッドのパラメータに伝達された値をバインドすることができる.
サンプルコード:
上のコードはURI templateの変数ownerIdの値とpetIdの値をメソッドのパラメータにバインドします.メソッドパラメータ名がバインドするuri templateの変数名と一致しない場合は、
@PathVariable("name")でuri templateの名前を指定する必要があります.
2、@RequestHeader、@CookieValue
@RequestHeader注記は、Requestリクエストheader部分の値をメソッドのパラメータにバインドできます.
 
サンプルコード:
 
Requestのheaderセクションです.
上のコードは、request header部分のAccept-Encodingの値をパラメータencodingにバインドし、Keep-Alive headerの値をパラメータkeepAliveにバインドします.
@CookieValueは@RequestHeaderと同様に、Request headerのcookieに関する値をメソッドのパラメータにバインドできます.
3、@SessionAttributes, @ModelAttribute
@SessionAttributes:
この注記は、HttpSessionのattributeオブジェクトの値をバインドするために使用され、メソッドのパラメータで使用しやすいです.
この注記にはvalue、typesの2つのプロパティがあり、名前とタイプで使用するattributeオブジェクトを指定できます.
サンプルコード:
@ModelAttribute
 
この注釈には2つの用法があり、1つは方法に用いられ、1つはパラメータに用いられる.
 
メソッドに使用する場合:通常@RequestMappingを処理する前に、バックグラウンドからクエリーを要求するmodelをバインドするために使用されます.
 
パラメータに使用する場合:名前に対応して、対応する名前の値を注釈のパラメータbeanにバインドするために使用します.バインドする値は次のとおりです.
 
A)@SessionAttributesが有効なattributeオブジェクト上;
 
B)@ModelAttributeメソッド上で指定されたモデルオブジェクトに使用されます.
 
C)上記の2つのケースがない場合、newはバインドする必要があるbeanオブジェクトを1つ作成し、requestで名前に応じて値をbeanにバインドします.
この2つのラベルは一緒に使うとエラーが発生する可能性があります.主にspringMVCの解析プロセスの問題です.この文章を参考にしてください.
http://blog.csdn.net/qwe6112071/article/details/51049138
4、@RequestParam, @RequestBody
@RequestParamには、次の3つのパラメータがあります.
 
パラメータ
説明
value
パラメータ名
required
必要かどうか@RequestParam注記を使用すると、デフォルトはtrueで、対応する要求パラメータが存在しない場合は例外が発生します:HTTP Status 400 - Required String parameter 'userName' is not presentdefaultValue
既定のパラメータ値
A、簡単なタイプのバインディングをよく処理し、Request.getParameter()で取得したStringが単純タイプに直接変換できる場合(String-->単純タイプの変換操作はConversionServiceで構成された変換器で行います).requestを使うからです.getParameter()方式でパラメータを取得するので、get方式でqueryStringの値を処理したり、post方式でbody dataの値を処理したりすることができます.
B、Content-Typeの処理に用いる:application/x-www-form-urlencoded符号化の内容であり、提出方式GET、POST;
C、この注釈には2つの属性がある:value、required;valueは、入力する値のid名を指定し、requiredはパラメータがバインドされる必要があるかどうかを示すために使用されます.
サンプルコード:
@RequestBody
 
この注記は、アプリケーション/json、アプリケーション/xmlなど、Content-Typeがapplication/x-www-form-urlencoded符号化されていないコンテンツを処理するためによく使用される.
 
HandlerAdapter構成のHttpMessageConvertersを使用してpost data bodyを解析し、対応するbeanにバインドします.
 
FormHttpMessageConverterが配置されているので、application/x-www-form-urlencodedの内容を処理するのにも使えますが、処理が必要なのは比較的特殊で、自分でテストすることができます.
5、複雑なオブジェクトと集合タイプのインパラメータバインド
  • 通常のオブジェクトパラメータバインドでは、オブジェクトメンバー変数名と要求パラメータ名を1つずつ対応させるだけでバインドを完了できます.図を直接見ればわかる(strutsに似ている)
  • 配列タイプパラメータバインド配列パラメータは、通常タイプ配列と複雑オブジェクト配列の2種類に分けられますが、springMVCは複雑オブジェクト配列の構造方法がないため、通常タイプ配列のみバインドできます.通常型配列とは、Integer、Stirng、Longなどの基本データ型のパッケージクラスを指す.
  • 集合型パラメータバインディングリスト、Set、Mapなどのパラメータバインディングに対して、直接バインディングを試みると失敗し、特定のクラスオブジェクトのメンバー属性として使用する必要があります.この場合、この特定のクラスオブジェクトをパッケージクラスと呼ぶこともできます.

  • 6、フォーマットデータ入出力(json、xmlなどのパラメータ解析)
    Spring3.0の重要なインタフェース:HttpMessageConveterは、要求データをJavaオブジェクトに変換したり、javaオブジェクトを特定のフォーマット出力に変換したりする強力なデータ変換機能を提供しています.例えば、フロントエンド登録フォームからjsonデータを取得してUserオブジェクトに変換したり、フロントエンドでユーザ情報を取得したり、バックエンド出力Userオブジェクトをjsonフォーマットに変換してフロントエンドに転送したりするのが一般的です.
    SpringMVCは、HttpMessageConveter実装クラスを多数提供しています.このうち、最も多く使用できる3つの実装クラスは、次のとおりです.
    実装クラス
    機能
    FormHttpMessageConverter
    要求と応答からフォームデータを読み取り/作成します.デフォルトでは、メディアタイプアプリケーション/x-www-form-urlencodedを読み込み、MultiValueMapにデータを書き込みます.
    MarshallingHttpMessageConverter
    Springのmarshaller/un-marshallerを使用してXMLデータを読み込み/作成します.アプリケーション/xmlに変換されます
    MappingJacksonHttpMessageConverter
    JacksonのObjectMapperを使用してJSONデータを読み込み/作成します.メディアタイプをアプリケーション/jsonに変換します
    SpringMVCでは、アセンブリを実現するには2つの方法があります.
  • 直接springMVCの起動xml登録org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapterはmessageConvertersを組み立てるために使用され、以下に示すようにサポートタイプをカスタマイズできます:
  • 注記, , json , maven Jackson jar ,springMVC 7 ,:-B y t e A r a y H t p M e s ageConverter-StringHttpMessageConverter-ResourceHttpMessageConverter-SourceHttpMessageConverter-XmlAwareFormHttpMessageConverter-Jaxb 2 RootElementHttpMessageConverter-MappingJacksonHttpMessageConverter以上の2つの方法で、変換器の登録を完了できます.しかし、制御層でデータの入出力変換を完了するには、以下の方法が必要です.@RequestBodyと@ResponseBodyを使用して、処理方法を表記します.ここで@RequestBodyは、HTTPリクエスト本文を適切なHttpMessageConverterを介して必要なオブジェクトコンテンツに変換します.@ResponseBodyは,我々のオブジェクトコンテンツを適切なHttpMessageConverterにより変換してHTTP応答の本文として出力する.  2. 処理方法としてHttpEntity、ResponseEntityを使用するパラメータまたは戻り値