如何避免 Spring Java 控制器中有太多参数

Pra*_*ant 4 java parameters controller spring-mvc parameter-passing

在我的 Spring Web 应用程序中:

    @RequestMapping(value = NEW)
public String addProduct(@RequestParam String name, @RequestParam(required = false) String description,
                         @RequestParam String price, @RequestParam String company, ModelMap model,
                         @RequestParam(required = false) String volume, @RequestParam(required = false) String weight) {
    try {
        productManagementService.addNewProduct(name, description, company, price, volume, weight);
        model.addAttribute("confirm", PRODUCT_ADDED);
        return FORM_PAGE;
    } catch (NumberFormatException e) {
        logger.log(Level.SEVERE, INVALID_VALUE);
        model.addAttribute("error", INVALID_VALUE);
        return FORM_PAGE;
    } catch (InvalidUserInputException e) {
        logger.log(Level.SEVERE, e.getMessage());
        model.addAttribute("error", e.getMessage());
        return FORM_PAGE;
    }
}
Run Code Online (Sandbox Code Playgroud)

减少/绑定参数总数的可能方法是什么。

har*_*bvp 5

创建表单类即

class MyForm{
String name;
String price;
String description;
...
 // Getters and setters included
}
Run Code Online (Sandbox Code Playgroud)

并且喜欢

@RequestMapping(value = NEW)
public String addProduct(@ModelAttribute MyForm myForm)
Run Code Online (Sandbox Code Playgroud)

MyForm请求参数的实例化和绑定到其属性以及添加到 ModelMap 是由 spring 在幕后完成的。

来源:Spring 文档

方法参数上的 @ModelAttribute 表示应该从模型中检索参数。如果模型中不存在该参数,则应首先实例化该参数,然后将其添加到模型中。一旦出现在模型中,参数的字段应该从具有匹配名称的所有请求参数中填充。这在 Spring MVC 中称为数据绑定,这是一种非常有用的机制,可以使您不必单独解析每个表单字段。