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());
	}
}


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