spring MVC之用注解开发控制器(二)
---------
接上一篇
开发单动作和多动作的控制器
基于注解的控制器类可以是个任意类,不实现特殊接口,也不扩展特殊的基类。你只要用@Controller注解对它进行标注即可。还可以在控制器中定义一个或者多个处理程序方法来处理单个或者多个动作。处理程序方法的签名很灵活,足以接受一系列参数。
@RequestMapping注解可以被应用到类级别或者方法级别上。第一种映射策略是将一个特定的URL模式映射到控制器类,然后将特定的HTTP方法映射到每个处理程序方法。
package com.apress.springrecipes.court.web;
...
import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/welcome.htm")
public class WelcomeController{
@RequestMapping(method = RequestMethod.GET)
public ModelAndView welcome(){
Date today = new Date();
return new ModelAndView("welcome","today",today);
}
}
第二种策略是直接将URL模式映射到每个处理程序方法中去,无需为控制器类定义映射。
package com.apress.springrecipes.court.web;
...
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class MemberController{
private MemberService memberService;
@Autowired
public MemberController(MemberService memberService){
this.memberService = memberService;
}
@RequestMapping("/member/add.htm")
public String addMember(Member member){
memberService.add(member);
return "redirect:list.htm";
}
@RequestMapping("/member/remove.htm")
public String removeMember(@RequestParam("memberName"String memberName)){
memberService.remove(memberName);
return "redirect:list.htm";
}
@RequestMapping("/member/list.htm")
public ModelAndView listMember(){
List<Member> members = memberService.list();
return new ModelAndView("memberList","members",members);
}
}
你可以为处理程序方法指定一系列的参数。例如,在add()方法中,指定一个Member类型的命令对象作为方法参数。然后,将请求参数绑定到这个对象的同名属性上。在remove()方法中,通过@RequestParm()方法指定一个绑定到请求参数的方法参数。默认情况下,与@RequestParam()注解绑定的请求参数是必要的。如果是可选的请求参数,可以将required属性设置为false.