【发布时间】:2013-03-01 15:40:38
【问题描述】:
我正在使用 RESTful 请求开发一个新的 Spring MVC 应用程序。该应用程序执行标准数据库加载对象、绑定值和保存。为了不丢失表单上不可用的对象值,我使用@ModelAttribute 方法在绑定之前预加载对象。
使用 URL 加载代理时
/agency/418
我的@ModelAttribute 方法现在可以学习“418”ID。我的理解是只能处理常规请求属性,所以我的 URL 需要是
/agency/418?id=418
这有点打破了 RESTful 模式。发布数据时也是如此。
有人可以评论这个观察吗...我错过了什么吗?
谢谢 西蒙
【问题讨论】:
-
我的评论是您正在尝试将 ModelAttribute 函数用于它不应该做的事情。它并不是为了预先填充对象以在 RESTful 服务调用中使用,而是为了简化表单数据和控制器之间的绑定。该数据将是 POST 或 GET,从这个意义上说,您是正确的,您必须传递值才能执行您正在尝试的操作,但我认为您的里程会有所不同。
-
stackoverflow.com/questions/3672100/… 建议使用表单对象进行绑定...我会研究一下。
-
有两个地方可以放ModelAttribute注解。第一个是视图处理程序方法的参数。在这种情况下,用途是提供表单和处理程序之间的绑定。第二种是将其放在不带参数并返回目标 ModelAttribute 的新实例的方法上。这通常是一种私有方法。这样做的目的是在处理程序定义不在模型或 HttpSession 中的 ModelAttribute 时创建默认版本。然后调用此方法来创建一个空的、已初始化的实例以供视图处理程序方法使用。
-
如果您想处理 RESTful 请求,其中值作为 URL 的一部分传递,我建议查看 PathVariable 注释,它允许您将处理程序的参数绑定到部件传入的 URL 模式。 @Martin Frey 下面有一个很好的例子。
标签: rest spring-mvc