Spring - ModelAttribute和参数名称

Igo*_*nov 8 java spring

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

例如,我有以下方法:

@RequestMappint("/success")
ModelAndView success(@ModelAttribute SomeCommand command) {
   // process
}
Run Code Online (Sandbox Code Playgroud)

和命令:

class SomeCommand {
   String title
}
Run Code Online (Sandbox Code Playgroud)

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

但是,如果我需要映射一些不同的名称呢?例如,如果请求如下:/success?sk_title=test.

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

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

无法控制输入参数名称,它有非常奇怪的名称,如'sk_yt_saf_amount',这就是为什么我试图将它绑定到更友好的属性名称.

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

Kev*_*sox 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;
   }
}
Run Code Online (Sandbox Code Playgroud)

如果您可以控制视图上的名称属性,则可以使事情变得更简单。只需更改名称属性以匹配 SomeCommand 对象字段,spring 就会自动绑定它们。 spring 3.0如何绑定请求参数? 您仍然需要将命令添加到模型中,并且此答案假设您使用的是 Spring 3 或更高版本。我认为 spring 可能还需要 SomeCommand 对象的字段上的 getter 和 setter。

@RequestMapping
public ModelAndView success(SomeCommand someCommand) {
   model.addAttribute("someCommand", someCommand);
}
Run Code Online (Sandbox Code Playgroud)