2

送信したフォームをページコントローラーに渡そうとしています。私は次のようにJSONオブジェクトを構築しています:

{
"periodId": "1",
"domainId": "46",
"modelTypeId": "1",
"modelGroup": {
    "modelGroupName": "123",
    "modelGroupDescription": "abc"
}
}

オブジェクトを整数および完全オブジェクトとして*Id渡したいところ。modelGroupだから私の目標はどういうわけかこれを機能させることです:

JSファイル

jQuery.ajax( "/Models/SaveModel", {
    type:"POST",
    dataType:'json',
    contentType:"application/json",
    data:JSON.stringify( output )
} );

ページコントローラー

@RequestMapping(value = "/SaveModel", method = RequestMethod.POST, headers = {"content-type=application/json"})
public
@ResponseBody
boolean createModel( SettlementModelGroup modelGroup, 
                     Integer periodId,
                     Integer domainId,
                     Integer modelTypeId )
{
    //process data here
}

それは可能ですか、それとも@RequestBody String object注釈を付けてからJSONファイルを解析する必要がありますか?

4

3 に答える 3

1

デフォルトでは、Spring MVC はこれを行いません。デフォルトのアプローチを使用する場合は、前述のように、、、でラッパー タイプを作成し、ラッパー タイプにでmodelGroupアノテーションperiodIdを付けることができます。domainIdmodelTypeId@RequestBody

あなたが書いたものに沿ったアプローチが絶対に必要な場合、アプローチは次のようになります。

カスタム注釈を作成します - たとえば@JsonArg

この注釈を使用して、関連するパラメーターに注釈を付けます

boolean createModel( @JsonArg SettlementModelGroup modelGroup, 
                     @JsonArg Integer periodId,
                     @JsonArg Integer domainId,
                     @JsonArg Integer modelTypeId );

@JsonArg アノテーション付き引数をサポートするカスタムHandlerMethodArgumentResolverを作成します。

boolean supportsParameter(MethodParameter parameter){
  return (parameter.getParameterAnnotation(JsonArg.class)!=null);
}

リクエスト本文から関連するパラメーターを解析するロジックを記述します。

public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
于 2012-07-17T14:44:24.667 に答える
0

@RequestBody の後に、モデル クラス (ゲッター/セッター) を含む 1 つのオブジェクトを記述する必要があります。

于 2013-03-10T22:28:48.717 に答える
0

上記のパラメーターとしてリストした 4 つのオブジェクトすべてを保持するオブジェクトを作成した場合、その 1 つのパラメーターに注釈を付けるだけで@RequestBody、すべてが変換されます。

于 2012-07-17T14:42:32.390 に答える