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类型periodIddomainIdmodelTypeId使用@RequestBody.

如果您绝对想要一种与您所写内容一致的方法,则一种方法是:

创建自定义注释 - 比如说@JsonArg

用这个注解标注相关参数

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

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

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

如果您创建了一个对象,其中包含上面列出的所有 4 个作为参数的对象,那么您只需使用该参数注释一个参数,@RequestBody它就会为您转换所有参数。

于 2012-07-17T14:42:32.390 回答
0

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

于 2013-03-10T22:28:48.717 回答