spring mvc用post方法传递对象

时间:2012-07-17 14:34:14

标签: java json spring spring-mvc

我正在尝试将提交的表单传递给我的页面控制器。我正在构建这样的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文件?

3 个答案:

答案 0 :(得分:1)

默认情况下,Spring MVC不会为你做这个 - 如果你想使用默认方法,你可以说你用modelGroup创建了一个包装类型,periodId,{{1 },domainId并使用modelTypeId注释包装器类型。

如果你绝对想要按照你所写的方法采取一种方法,那么方法将是:

创建自定义注释 - 例如@RequestBody

使用此注释

注释相关参数
@JsonArg

编写一个自定义HandlerMethodArgumentResolver,它将支持@JsonArg带注释的参数:

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

编写逻辑以从请求正文中解析出相关参数:

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

答案 1 :(得分:0)

如果您创建了一个对象,其中包含您列出的所有4个对象作为上述参数,那么您可以使用@RequestBody注释该一个参数,并将它全部转换为您。

答案 2 :(得分:0)

在@RequestBody之后你必须写一个对象,其中包含模型类(getters / setters)