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