在春季将 Path 变量绑定到自定义模型对象

2022-09-01 08:50:18

我有一个类来模拟我的请求,比如

class Venue {
    private String city;
    private String place;

    // Respective getters and setters.
}

我想支持一个RESTful URL来获取有关场地的信息。所以我有这样的控制器方法。

@RequestMapping(value = "/venue/{city}/{place}", method = "GET")
public String getVenueDetails(@PathVariable("city") String city, @PathVariable("place") String place, Model model) {
    // code
}

有没有办法,我可以在春天说将我的路径变量绑定到模型对象(在本例中为Venue),而不是获取每个单独的参数?


答案 1

Spring MVC提供了将请求参数和路径变量绑定到 JavaBean 中的功能,在您的例子中是 。例如:Venue

@RequestMapping(value = "/venue/{city}/{place}", method = "GET")
public String getVenueDetails(Venue venue, Model model) {
    // venue object will be automatically populated with city and place
}

请注意,您的 JavaBean 必须具有和属性才能正常工作。cityplace

有关更多信息,您可以查看来自spring-projects/spring-mvc-showcase的withParamGroup()示例。


答案 2

根据 http://static.springsource.org/spring/docs/3.2.3.RELEASE/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-uri-templates 提供的Spring文档,仅向简单类型提供自动支持:

@PathVariable参数可以是任何简单类型,如 int、long、Date 等。Spring 会自动转换为适当的类型,或者如果它不能这样做,则会引发 TypeMatchException。

我还没有尝试过 和 的这种特定组合,但看起来您可以通过创建自定义来实现所需的实现,详见 http://static.springsource.org/spring/docs/3.2.3.RELEASE/spring-framework-reference/html/mvc.html#mvc-ann-typeconversion@RequestParamModelWebBindingInitializer

自定义类将有权访问 WebRequest,并将返回一个域对象,该对象填充了从此请求中提取的数据。


推荐