角色扮演2铺垫剧情:Spring 2.5:Spring MVC中的新特性(3) - 编程入门网

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 10:47:35
用@RequestParam提取和解析参数
 
@MVC另外一个特性是其提取和解析请求参数的能力。让我们继续重构上面的方法,并在其中添加@RequestParam注解:
 
@RequestMapping("/accounts/show")
 public void show(@RequestParam("number") String number, Map model) {
    model.put("account", accountRepository.findAccount(number));
 }
 
这里@RequestParam注解可以用来提取名为“number”的String类型的参数,并将之作为输入参数传入。 @RequestParam支持类型转换,还有必需和可选参数。类型转换目前支持所有的基本Java类型,你可通过定制的PropertyEditors 来扩展它的范围。下面是一些例子,其中包括了必需和可选参数:
 
@RequestParam(value="number", required=false) String number
 @RequestParam("id") Long id
 @RequestParam("balance") double balance
 @RequestParam double amount
 
注意,最后一个例子没有提供清晰的参数名。当且仅当代码带调试符号编译时,结果会提取名为“amount ”的参数,否则,将抛出IllegalStateException异常,因为当前的信息不足以从请求中提取参数。由于这个原因,在编码时最好显式的指定参数名。
 
继续@RequestMapping的讨论
 
把@RequestMapping放在类级别上是合法的,这可令它与方法级别上的@RequestMapping注解协同工作,取得缩小选择范围的效果,下面是一些例子。
 
类级别:
 
RequestMapping("/accounts/*")
 
方法级别:
 
@RequestMapping(value="delete", method=RequestMethod.POST)
 @RequestMapping(value="index", method=RequestMethod.GET, params="type=checking")
 @RequestMapping
 
第一个方法级的请求映射和类级别的映射结合,当HTTP方法是POST时与路径“/accounts/delete”匹配;第二个添加了一个要求,就是名为“type”的请求参数和其值“checking”都需要在请求中出现;第三个根本就没有指定路径,这个方法匹配所有的 HTTP方法,如果有必要的话可以用它的方法名。下面改写我们的方法,使它可以依靠方法名进行匹配,程序如下:
 
@Controller
 @RequestMapping("/accounts/*")
 public class AccountsController {
    @RequestMapping(method=RequestMethod.GET)
    public void show(@RequestParam("number") String number, Map model)
   {
     model.put("account", accountRepository.findAccount(number));
    }
    ...
 
方法匹配的请求是“/accounts/show”,依据的是类级别的@RequestMapping指定的匹配路径“/accounts/*”和方法名“show”。本文来自编程入门网:http://www.bianceng.cn/Programming/Java/201101/23558_3.htm