我通过剖析示例应用程序来自学Spring,然后在这里和那里添加代码来测试我在剖析期间开发的理论。在测试我添加到Spring应用程序的一些代码时,我收到了以下错误消息:
An Errors/BindingResult argument is expected to be declared immediately after the
model attribute, the @RequestBody or the @RequestPart arguments to which they apply
错误消息引用的方法是:
@RequestMapping(value = "/catowners", method = RequestMethod.GET)
public String findOwnersOfPetType(Integer typeID, BindingResult result, Map<String, Object> model) {
// find owners of a specific type of pet
typeID = 1;//this is just a placeholder
Collection<Owner> results = this.clinicService.findOwnerByPetType(typeID);
model.put("selections", results);
return "owners/catowners";
}
当我试图在web浏览器中加载/catowners url模式时,触发了此错误消息。我已经查看了这个页面和这个帖子,但解释似乎不清楚。
谁能告诉我如何解决此错误,并解释它的含义?
编辑:
基于Biju Kun的回应,我将语法更改为以下内容:
@RequestMapping(value = "/catowners", method = RequestMethod.GET)
public String findOwnersOfPetType(@Valid Integer typeID, BindingResult result, Map<String, Object> model)
我仍然收到同样的错误信息。有什么我不明白的吗?
第二次编辑:
根据Sotirios的评论,我将代码更改为以下内容:
@RequestMapping(value = "/catowners", method = RequestMethod.GET)
public String findOwnersOfPetType(BindingResult result, Map<String, Object> model) {
// find owners of a specific type of pet
Integer typeID = 1;//this is just a placeholder
Collection<Owner> results = this.clinicService.findOwnerByPetType(typeID);
model.put("selections", results);
return "owners/catowners";
}
在告诉eclipse以…再次在服务器上运行后,我仍然收到相同的错误消息。
有什么我不明白的吗?
如果您有一个类型为< code>BindingResult的参数,它实际上是在将http请求参数绑定到直接在BindingResult方法参数之前声明的变量时保存任何错误。
所以所有这些都是可以接受的:
@RequestMapping(value = "/catowners", method = RequestMethod.GET)
public String findOwnersOfPetType(@Valid MyType type, BindingResult result, ...)
@RequestMapping(value = "/catowners", method = RequestMethod.GET)
public String findOwnersOfPetType(@ModelAttribute MyType type, BindingResult result, ...)
@RequestMapping(value = "/catowners", method = RequestMethod.GET)
public String findOwnersOfPetType(@RequestBody @Valid MyType type, BindingResult result, ...)
Spring使用名为HandlerMethodArgumentResolver
的接口来解析处理程序方法中的参数,并构造一个对象作为参数传递。
如果找不到,则传递 null
(我必须验证这一点)。
BindingResult
是一个结果对象,其中包含在验证@ModelAttribute
、@Valid
、@RequestBody
或@RequestPart
时可能出现的错误,因此您只能将其与这样批注的参数一起使用。每个注释都有 HandlerMethodArgumentResolver
。
EDIT(评论回复)
您的示例似乎表明用户应该提供宠物类型(作为整数)。我会将方法更改为
@RequestMapping(value = "/catowners", method = RequestMethod.GET)
public String findOwnersOfPetType(@RequestParam("type") Integer typeID, Map<String, Object> model)
并且您可以将您的请求(取决于您的配置)设置为
localhost:8080/yourcontext/catowners?type=1
这里也没有什么要验证的,所以您不需要或不需要BindingResault
。如果您尝试添加它,它会失败。
我正在学习Spring MVC,并试图验证表单。当用户搜索空白字符串时,将显示错误。当我执行我的代码时,我得到以下错误 Errors/BindingResult参数应该紧随控制器方法签名中的模型属性参数之后:public java.lang.string com.mycompany.controller.catalog.searchController.search(javax.servlet.h
问题是,即使在为Exception.class声明回滚之后,事务仍然没有回滚。 1.我的数据源
属性参数用来给已定义的属性附加元数据,类似于脚本语言的 Decorator 或者 C# 的 Attribute。 属性检查器相关参数 参数名 说明 类型 默认值 备注 type 限定属性的数据类型 (Any) undefined 详见 type 参数 visible 在 属性检视器 面板中显示或隐藏 boolean (注1) 详见 visible 参数 displayName 在 属性检视器 面板
属性参数用来给已定义的属性附加元数据,类似于脚本语言的 Decorator 或者 C# 的 Attribute。 属性检查器相关参数 参数名 说明 类型 默认值 备注 type 限定属性的数据类型 (Any) undefined 详见 type 参数 visible 在 属性检视器 面板中显示或隐藏 boolean (注1) 详见 visible 参数 displayName 在 属性检视器 面板
金属模式:金属参数 当使用 金属工作流程(相对于镜面工作流程)时,表面的发射率和光照通过金属度和平滑度修改。 当使用这种流程时,仍然会生成镜面反射,但是看起来是否真实,取决于设置的金属度和平滑度,而不是一个明确定义的开关。 金属模式不仅仅适用于看起来有金属质感的材质!这种模式之所以为称为金属模式,是因为你可以通过它控制物体表面的金属或非金属程度(译注:是否是金属或非金属,以及程度)。 金属参数 材
由于 Vue 不允许动态添加根级响应式属性,所以你必须在初始化实例前声明根级响应式属性,哪怕只是一个空值: var vm = new Vue({ data: { // 声明 message 为一个空值字符串 message: '' }, template: '<div>{{ message }}</div>' }) // 之后设置 `message` vm.messa