Mapping Requests With @RequestMapping

你可以使用@RequestMapping注解去映射URL类似/appointments到整个类或者处理器的方法上,通常情况下类级别的映射了一个特定的请求路径,而方法级别的注解是针对一个特定的http的请求的,下面我们将给出例子:

@Controller
@RequestMapping("/appointments")
public class AppointmentsController {
	private final AppointmentBook appointmentBook;

	@Autowired
	public AppointmentsController(AppointmentBook appointmentBook) {
		this.appointmentBook = appointmentBook;
	}

	@RequestMapping(method = RequestMethod.GET)
	public Map<String, Appointment> get() {
		return appointmentBook.getAppointmentsForToday();
	}

	@RequestMapping(value = "/{day}", method = RequestMethod.GET)
	public Map<String, Appointment> getForDay(
			@PathVariable @DateTimeFormat(iso = ISO.DATE) Date day, Model model) {
		return appointmentBook.getAppointmentsForDay(day);
	}

	@RequestMapping(value = "/new", method = RequestMethod.GET)
	public AppointmentForm getNewForm() {
		return new AppointmentForm();
	}

	@RequestMapping(method = RequestMethod.POST)
	public String add(@Valid AppointmentForm appointment, BindingResult result) {
		if (result.hasErrors()) {
			return "appointments/new";
		}
		appointmentBook.addAppointment(appointment);
		return "redirect:/appointments";
	}
}

在上面的例子中,@RequestMapping 这个注解在很多地方都用到了,第一个使用到的地方就是class 级别的,它表明该处理器的所有方法都必须在/appointments这个路径下,get()方法对@RequestMapping有改进,因为它只接收GET方式的请求。getForDay() 将使用URL模板。

类级别的@RequestMapping不是必须的,没有它的话,所有的路径都是简单的绝对路径,而不是相对路径。例如下面:

@Controller
public class ClinicController {
	private final Clinic clinic;

	@Autowired
	public ClinicController(Clinic clinic) {
		this.clinic = clinic;
	}

	@RequestMapping("/")
	public void welcomeHandler() {
	}

	@RequestMapping("/vets")
	public ModelMap vetsHandler() {
		return new ModelMap(this.clinic.getVets());
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章