如何配置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概念。
答案 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;
}
}