spring mvcデータバインディング
7208 ワード
1、spring mvcデフォルトで提供されるデータバインディング類
全パラメータ対応解析クラスは以下の通りです.
Request Parame MethodAgMentReglaver処理タイプ: 1、注解Request Paramを含みますが、処理しないパラメータタイプはMapであり、value値は含まれていません. 2、パラメータタイプはMultiiprtFile、またはjavax.servlet.http.Partのタイプの処理方式です. 1、パラメータタイプがMultiiprtFileであれば、MultipartFileに戻ります. 2、パラメータタイプがList<MultiiprtFile>なら、List<MultiiprtFile>に戻ります. 3、パラメータタイプがjavax.servlet.http.Partの場合、Partに戻ります. 4、そうでない場合はrequest.get Parameeter(「key」)Request Parame MapMethodArgMentReolver処理タイプに戻ります. 1、パラメータはRequest Paramの注釈を含み、注釈のvalue値は空であり、パラメータタイプはMapの処理方式である. 1、parameterをmap形式で保存し、もしvalueに複数の値があれば、最初のPathVarable MethodAgMentResolover処理タイプを取る: 1、注釈を含むPathVarableは、パラメータタイプがMapであり、PathVarableのvalueは空で処理しない方式である: 1、Request Mappingのurl表現に基づいて、対応する値を見つけます. 2、対応する値をパラメータタイプのオブジェクトに変換する 3、View.class.get Name()+「.pathVarables」をkeyとし、パラメータ値はvalueとし、requestのAttributeに入れたPathVarable MapMethodArmage処理タイプ: 1、注釈PathVarableを含み、パラメータタイプはMapであり、PathVarableのvalueは空の処理方式である: 1、Map形式に戻る対象MatrixVarable MethodArgomntResolaver処理タイプ: 1、注釈MatrixVarableを含み、パラメータタイプがMapであり、MatrixVarableのvalueは空です. 1、対応する値をパラメータに反映する例 //GET/owners/42q=11/pets/21q=22 @Request Mapping(value="/owners/{weners}/pets/{petId}、method=Request Method.GET) public void findPet( @MatrixVarable(value=「q」、pathVar=「ownerald」)int q 1, @MatrixVarable(value="q"pathVar="petId")int 2){ //q 1==11 //q 2==22 } MatrixVarable MapMethodAgMentResolover処理タイプ: 1、注釈MatrixVarableを含み、パラメータタイプはMapであり、MatrixVarableのvalueは空の処理方式である: 2、生産Map Servlet ModelAttributeMethodProcessor処理タイプ: 1、パラメータにはコメントModelAttributeの処理方式が含まれています. 1、nameを取得して、デフォルトはvalueです.ない場合はパラメータ名を使用します. 2、もしmodelにnameのオブジェクトが含まれていたら、これは返ってきます.もしなかったらオブジェクトを作成し、request.get Parameterの値を対象に反映します. 3、対象をmodelに入れるRequest Request RespnseBodMethodProcessorの処理タイプ: 1、パラメータには注解Request Bodyの処理方法が含まれています. 1、postデータを対応する対象に変換するRequest PartMethodArgenResoliver処理タイプ: 1、コメントを含むRequest Part 2、タイプはMultiiprtFileですが、Request Paramは注釈されていません. 3、タイプはjavax.servlet.http.Partの処理方式です. 1、対象に戻るタイプのデータRequest Header MethodArmagentReolver処理タイプ: 1、注釈Request Headerを含み、且つタイプはMap処理方式ではない: 1、request.get HeaderValues(name)[0]Request Header MapMethodAgMentReolver処理タイプ: 1、注釈Request Headerを含み、且つタイプはMap処理方式である. 1、HeanderをMap Servlet Cookie Value MethodAgMentResolover処理タイプに変換する: 1、注釈Cookie Valueの処理方法を含む: 1、対応するクッキーを見つけて、パラメータタイプがCookieであればcookieに戻ります.もしStringであれば、cookieの値ExpressionValueMethodAgMentResolaver処理タイプに戻ります. 1、注釈Value処理方式を含む:Servlet Request MethodAgMentResolaver処理タイプ:処理方式:Servlet ResonseMethodAgMentResoliver処理タイプ: 1、処理タイプはWebRequest.class.isAsignable From(paramType)𞓜 ServletRequest.class.isAsignable From(paramType)124 MultiiprtRequest.class.isAsignable From(paramType) HttpSession.class.isAsignable From(paramType)𞓜 Principal.class.isAsignable From(paramType)𞓜 Locale.class.equals(paramType)124 InputStream.class.isAsignable From(paramType) Reader.class.isAsignable From;処理方式: 1、対応タイプのRedirectAttributes MethodArmigment Resoliver処理タイプを返します. 1、パラメータタイプはRedirectAttributes処理方式:ModelMethodProcessor処理タイプ: 1、処理タイプはModel処理方式です. 1、Model MapMethodProcessorに戻る処理タイプ: 1、処理タイプはMap処理方式です. 1、Model ErrerMethodArgomntResoloverに戻る処理タイプ: 1、処理タイプはErrers処理方式です. 1、もしmodelにデータがないなら、Illegel StateExceptionの異常を抛り出して、でなければBindingResoult Session Status MethodArtResoliverの処理タイプに戻ります. 1、タイプはSession Stortsの処理方式です. 1、return mavContiner.get Session Starts();UriComponents Builder MethodAgMentResolover処理タイプ: 1、タイプはUriComponents Buiderの処理方式です. 1、UriComponents Buiderに戻る
private List<HandlerMethodArgumentResolver> getDefaultArgumentResolvers() {
List<HandlerMethodArgumentResolver> resolvers = new ArrayList<HandlerMethodArgumentResolver>();
// Annotation-based argument resolution
resolvers.add(new RequestParamMethodArgumentResolver(getBeanFactory(), false));
resolvers.add(new RequestParamMapMethodArgumentResolver());
resolvers.add(new PathVariableMethodArgumentResolver());
resolvers.add(new PathVariableMapMethodArgumentResolver());
resolvers.add(new MatrixVariableMethodArgumentResolver());
resolvers.add(new MatrixVariableMapMethodArgumentResolver());
resolvers.add(new ServletModelAttributeMethodProcessor(false));
resolvers.add(new RequestResponseBodyMethodProcessor(getMessageConverters()));
resolvers.add(new RequestPartMethodArgumentResolver(getMessageConverters()));
resolvers.add(new RequestHeaderMethodArgumentResolver(getBeanFactory()));
resolvers.add(new RequestHeaderMapMethodArgumentResolver());
resolvers.add(new ServletCookieValueMethodArgumentResolver(getBeanFactory()));
resolvers.add(new ExpressionValueMethodArgumentResolver(getBeanFactory()));
// Type-based argument resolution
resolvers.add(new ServletRequestMethodArgumentResolver());
resolvers.add(new ServletResponseMethodArgumentResolver());
resolvers.add(new HttpEntityMethodProcessor(getMessageConverters()));
resolvers.add(new RedirectAttributesMethodArgumentResolver());
resolvers.add(new ModelMethodProcessor());
resolvers.add(new MapMethodProcessor());
resolvers.add(new ErrorsMethodArgumentResolver());
resolvers.add(new SessionStatusMethodArgumentResolver());
resolvers.add(new UriComponentsBuilderMethodArgumentResolver());
// Custom arguments
if (getCustomArgumentResolvers() != null) {
resolvers.addAll(getCustomArgumentResolvers());
}
// Catch-all
resolvers.add(new RequestParamMethodArgumentResolver(getBeanFactory(), true));
resolvers.add(new ServletModelAttributeMethodProcessor(true));
return resolvers;
}
2、その中でカスタムクラスを解析するのはServlet ModelAttributeMethodProcessorです.全パラメータ対応解析クラスは以下の通りです.
Request Parame MethodAgMentReglaver処理タイプ: 1、注解Request Paramを含みますが、処理しないパラメータタイプはMapであり、value値は含まれていません. 2、パラメータタイプはMultiiprtFile、またはjavax.servlet.http.Partのタイプの処理方式です. 1、パラメータタイプがMultiiprtFileであれば、MultipartFileに戻ります. 2、パラメータタイプがList<MultiiprtFile>なら、List<MultiiprtFile>に戻ります. 3、パラメータタイプがjavax.servlet.http.Partの場合、Partに戻ります. 4、そうでない場合はrequest.get Parameeter(「key」)Request Parame MapMethodArgMentReolver処理タイプに戻ります. 1、パラメータはRequest Paramの注釈を含み、注釈のvalue値は空であり、パラメータタイプはMapの処理方式である. 1、parameterをmap形式で保存し、もしvalueに複数の値があれば、最初のPathVarable MethodAgMentResolover処理タイプを取る: 1、注釈を含むPathVarableは、パラメータタイプがMapであり、PathVarableのvalueは空で処理しない方式である: 1、Request Mappingのurl表現に基づいて、対応する値を見つけます. 2、対応する値をパラメータタイプのオブジェクトに変換する 3、View.class.get Name()+「.pathVarables」をkeyとし、パラメータ値はvalueとし、requestのAttributeに入れたPathVarable MapMethodArmage処理タイプ: 1、注釈PathVarableを含み、パラメータタイプはMapであり、PathVarableのvalueは空の処理方式である: 1、Map形式に戻る対象MatrixVarable MethodArgomntResolaver処理タイプ: 1、注釈MatrixVarableを含み、パラメータタイプがMapであり、MatrixVarableのvalueは空です. 1、対応する値をパラメータに反映する例 //GET/owners/42q=11/pets/21q=22 @Request Mapping(value="/owners/{weners}/pets/{petId}、method=Request Method.GET) public void findPet( @MatrixVarable(value=「q」、pathVar=「ownerald」)int q 1, @MatrixVarable(value="q"pathVar="petId")int 2){ //q 1==11 //q 2==22 } MatrixVarable MapMethodAgMentResolover処理タイプ: 1、注釈MatrixVarableを含み、パラメータタイプはMapであり、MatrixVarableのvalueは空の処理方式である: 2、生産Map Servlet ModelAttributeMethodProcessor処理タイプ: 1、パラメータにはコメントModelAttributeの処理方式が含まれています. 1、nameを取得して、デフォルトはvalueです.ない場合はパラメータ名を使用します. 2、もしmodelにnameのオブジェクトが含まれていたら、これは返ってきます.もしなかったらオブジェクトを作成し、request.get Parameterの値を対象に反映します. 3、対象をmodelに入れるRequest Request RespnseBodMethodProcessorの処理タイプ: 1、パラメータには注解Request Bodyの処理方法が含まれています. 1、postデータを対応する対象に変換するRequest PartMethodArgenResoliver処理タイプ: 1、コメントを含むRequest Part 2、タイプはMultiiprtFileですが、Request Paramは注釈されていません. 3、タイプはjavax.servlet.http.Partの処理方式です. 1、対象に戻るタイプのデータRequest Header MethodArmagentReolver処理タイプ: 1、注釈Request Headerを含み、且つタイプはMap処理方式ではない: 1、request.get HeaderValues(name)[0]Request Header MapMethodAgMentReolver処理タイプ: 1、注釈Request Headerを含み、且つタイプはMap処理方式である. 1、HeanderをMap Servlet Cookie Value MethodAgMentResolover処理タイプに変換する: 1、注釈Cookie Valueの処理方法を含む: 1、対応するクッキーを見つけて、パラメータタイプがCookieであればcookieに戻ります.もしStringであれば、cookieの値ExpressionValueMethodAgMentResolaver処理タイプに戻ります. 1、注釈Value処理方式を含む:Servlet Request MethodAgMentResolaver処理タイプ:処理方式:Servlet ResonseMethodAgMentResoliver処理タイプ: 1、処理タイプはWebRequest.class.isAsignable From(paramType)𞓜 ServletRequest.class.isAsignable From(paramType)124 MultiiprtRequest.class.isAsignable From(paramType) HttpSession.class.isAsignable From(paramType)𞓜 Principal.class.isAsignable From(paramType)𞓜 Locale.class.equals(paramType)124 InputStream.class.isAsignable From(paramType) Reader.class.isAsignable From;処理方式: 1、対応タイプのRedirectAttributes MethodArmigment Resoliver処理タイプを返します. 1、パラメータタイプはRedirectAttributes処理方式:ModelMethodProcessor処理タイプ: 1、処理タイプはModel処理方式です. 1、Model MapMethodProcessorに戻る処理タイプ: 1、処理タイプはMap処理方式です. 1、Model ErrerMethodArgomntResoloverに戻る処理タイプ: 1、処理タイプはErrers処理方式です. 1、もしmodelにデータがないなら、Illegel StateExceptionの異常を抛り出して、でなければBindingResoult Session Status MethodArtResoliverの処理タイプに戻ります. 1、タイプはSession Stortsの処理方式です. 1、return mavContiner.get Session Starts();UriComponents Builder MethodAgMentResolover処理タイプ: 1、タイプはUriComponents Buiderの処理方式です. 1、UriComponents Buiderに戻る