利用context:component-scan去掃描package以下的所有@Controller,
那要如何將USER傳送的request對應到符合的控制器,
便是依賴@RequestMapping,
有以下幾種方式可以使用:
1.利用URL對應
可以在function前利用@RequestMapping來對應傳送的URL,
假設你的webapp名稱為springmvc,
那當你呼叫/springmvc/account/create時,
便會執行下列AccountController的create(),
package com.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class AccountController {
@RequestMapping("/account/create")
public String create() {
return "account/create";
}
}
除此之外,你也可以在class的地方設定@RequestMapping,以下面UserController為例,
當你呼叫/springmvc/user/login,
就會執行login(),
package com.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/login")
public String login() {
return "user/login";
}
}
通常建議在@Controller的class增加設定@RequestMapping,這樣在URL對應時,
便可以很快知道要對應User的@Controller,
然後尋找底下的login()。
2.透過RequestMethod、param、header來對應
可以透過HTTP的請求方法,
如GET、POST、DELETE、PUT、TRACE....等等,
或者是參數和標頭來尋找對應@Controller及@RequestMapping,
可參考下面的例子:
package com.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/car")
public class CarController {
@RequestMapping(value = "/create", method = RequestMethod.POST)
public String create() {
return "/car/create";
}
@RequestMapping(value = "/update", params = "carNo")
public String update() {
return "/car/update";
}
@RequestMapping(value = "/delete", headers="Content-Type=text/plain")
public String delete() {
return "/car/delete";
}
}
其中關於params參數及headers的設定,有一些可以使用的方式如下:
params="carNo":請求參數必須包含名為carNo的參數
params="!carNo":請求參數不能有包含名為carNo的參數
params="carNo!=123":請求參數必須包含名為carNo的參數,但值不可為123
params={"carNo=123","carBand"}:請求參數必須包含名為carNo及carBand的參數,
其中carNo的值必須為123
headers的使用方式如同上述params。
沒有留言:
張貼留言