在Spring中使用组合对象作为RequestParam的最简单方法

时间:2012-01-11 11:50:18

标签: spring-mvc

以下是......伪代码......为了说明我在寻找什么:

// Setters and Getters ommitted to keep the example short here:
class Address
{
  private String street;
  private String city;
}

class AddressBookEntry
{
  private String name;
  private Address address;
}

class MyController
{
  public void render(@RenderParam AddressBookEntry entry)
  {
    ...
  }
}

如您所见,有两个POJO(Address和AddressBookEntry)。现在我想将AddressBookEntry作为http请求参数传递给我的Controller。我想这个URL看起来像这样:/target?entry.name=Random-Guy&entry.address.street=Random-Street&entry.address.city=Random-City

据我了解@RenderParam并没有这样做。我必须创建一个PropertyEditor,它接受一个字符串并从中构造我的目标Object,这意味着我不能为每个(子)属性设置单独的URL-param。

@ModelAttribute越来越接近了,但我无法找到任何提示是否以及如何嵌套对象可能与此注释一起使用。此外,此注释在没有"条目的情况下工作。"我上面的URL中的前缀意味着我需要确保我没有多个共享属性名称的ModelAttributes,对吗?这听起来很紧张。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这是你应该使用@ModelAttribute的情况。它可以根据需要支持嵌套对象。

如果您需要多个@ModelAttribute,您可以将它们组合成特殊类(例如,您可以将该类包含类型为entry的{​​{1}}字段,以便参数名称是相同的。)