Spring - ModelAttribute和参数名称

时间:2011-08-30 00:27:32

标签: java spring

如何配置Model / Command类以绑定到特定的请求参数?

例如我有以下方法:

@RequestMappint("/success")
ModelAndView success(@ModelAttribute SomeCommand command) {
   // process
}

和命令:

class SomeCommand {
   String title
}

当请求参数名称等于命令属性名称时,它适用于/success?title=test之类的请求。

但是如果我需要映射一些不同的名字怎么办?例如,如果请求如下:/success?sk_title=test

如何将请求参数sk_title映射到我的命令的title字段?

此命令有一串参数,并由几种不同的方法(它与其他遗留系统集成)使用,因此将所有这些参数作为@RequestParam获取因为每个RequestMapped方法都需要很多工作,并且需要太多的复制/粘贴工作,这会带来很多错误和不受支持的代码。

我对输入参数名称有无控制,它有非常奇怪的名字,比如'sk_yt_saf_amount',这就是我试图将它绑定到更友好的属性名称的原因。

PS我在那里使用单词'command'作为输入数据,以区别于Model和ModelAndView概念。

2 个答案:

答案 0 :(得分:0)

    @RequestMapping("/success")
    ModelAndView success(@RequestParam("sk_title") String title) {
       SomeCommand command = new SomeCommand();
       command.setTitle(title);
       model.addAttribute("title", command);
       //rest of code here
    }

class SomeCommand {
   String title
   public void setTitle(String title){
    this.title = title;
   }
}

如果您可以控制视图上的name属性,则可以使此操作更简单。只需更改名称属性以匹配SomeCommand对象字段,spring将自动绑定它们。 How to bind request params in spring 3.0?您仍然需要将命令添加到模型中,并且此答案假定您使用的是Spring 3或更高版本。我认为spring也可能需要在SomeCommand对象的字段上使用getter和setter。

@RequestMapping
public ModelAndView success(SomeCommand someCommand) {
   model.addAttribute("someCommand", someCommand);
}

答案 1 :(得分:0)

如果您想将地图请求参数sk_title添加到标题字段,请添加名称为sk_title的setter:

public class SomeCommand {
    private String title;

    public String getTitle() {
        return title;
    }

    public void setSk_title(String title) {
        this.title = title;
    }
}