likes
comments
collection
share

@ModelAttribute 参数案例说明

作者站长头像
站长
· 阅读数 25

注解属性作用:

  • value 和 name

    • 这两个属性都是用于指定模型属性的名称。在大多数情况下,Spring 会自动根据方法参数的类型推断出属性名称。
    • 如果方法参数是一个简单类型或复杂类型的集合,Spring 会使用类型名称的非限定部分(即类名去掉包路径)作为模型属性的键。例如,mypackage.OrderAddress 类会推断出属性名称 orderAddress
    • 如果方法参数是一个复杂类型的集合,如 List<mypackage.OrderAddress>,则会推断出属性名称 orderAddressList
    • 你可以使用 value 或 name 属性来显式指定一个不同的名称,当需要与自动推断的名称不同,或者方法参数是一个基本数据类型时。
  • binding

    • 此属性用于控制是否对模型属性启用数据绑定。数据绑定是指将 HTTP 请求参数自动映射到模型对象的过程。
    • 默认情况下,binding 属性设置为 true,这意味着对于使用 @ModelAttribute 注解的参数,Spring 会尝试执行数据绑定。
    • 如果你希望某个参数不进行数据绑定(例如,参数是一个常量或从其他来源获取的值),你可以将 binding 设置为 false。这也可以用于防止对某些特定字段的自动数据绑定,而将它们留给自定义的绑定逻辑。

业务场景:

假设你正在开发一个电子商务网站的搜索功能,用户可以通过提交表单来搜索产品。搜索表单包含多个字段,如关键字、分类和价格范围。

<form action="/search" method="get">
    <input type="text" name="keyword" placeholder="Enter keyword">
    <select name="category">
        <option value="all">All Categories</option>
        <!-- 其他分类选项 -->
    </select>
    <input type="text" name="priceFrom" placeholder="Price from">
    <input type="text" name="priceTo" placeholder="Price to">
    <button type="submit">Search</button>
</form>

控制器方法示例:

@GetMapping("/search")
public String search(@ModelAttribute("criteria") SearchCriteria criteria) {
    // 使用 criteria 中的数据执行搜索
    List<Product> products = productService.search(criteria);
    // 将搜索结果添加到模型并返回视图
    return "search-results";
}

在这个例子中,@ModelAttribute("criteria") 注解告诉 Spring MVC 将请求中的所有参数绑定到 SearchCriteria 类的一个实例上,并且这个实例被命名为 criteria。你可以通过 name 属性来指定一个更清晰或更合适的名称,而不是使用自动推断的名称。

目的:

  • @ModelAttribute 注解使得开发者能够将 HTTP 请求参数映射到控制器方法的参数上,简化了数据的获取和处理流程。
  • 它支持复杂的数据类型和嵌套属性,使得处理复杂的表单数据变得容易。
  • 使用 @ModelAttribute 注解可以提高代码的可读性和可维护性,尤其是在处理包含多个字段的表单时。
转载自:https://juejin.cn/post/7382892409816236041
评论
请登录