鍦ㄤ竴涓狿OJO涓婇潰浣跨敤 @Controller 灝卞彲浠ユ爣娉ㄨPOJO鏄竴涓狢ontroller錛屽氨榪欎箞綆鍗曘?@Controller娉ㄨВ瀹氫箟鍦╫rg.springframework.steretype鍖呬腑銆?br />浣跨敤鏂瑰紡錛?@Controller 鎴栬?@Controller("indexController)銆?org.springframework.steretype鍖呬腑榪樺寘鍚?@Componenet @Service @Respository
涓変釜娉ㄨВ銆侤Component鏄氱敤鏍囨敞錛孈Controller鏍囨敞web鎺у埗鍣紝@Service鏍囨敞Servicec灞傜殑鏈嶅姟錛孈Respository鏍囨敞DAO灞傜殑鏁版嵁璁塊棶銆?br />
2銆佷嬌鐢ˊRequestMapping娉ㄨВ澶勭悊璇鋒眰鏄犲皠
SpringMVC涓敞瑙e熀鏈兘鍖呭惈鍦?org.springframework.web.bind.annotation 鍖呬腑銆傚厛鐪嬩竴涓?span style="color: #000000;">@RequestMapping 娉ㄨВ鐨勬簮鐮併?br />
@Target( { ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
/**
* 鎸囧畾鏄犲皠鐨刄RL.鍙互鍦ㄧ被灞傛鍜屾柟娉曞眰嬈′嬌鐢ㄣ傛柟寮忓涓嬶細(xì)
* @RequestMapping("/add_")鎴?nbsp;@RequestMapping(value = "/add")
* 鏀寔Ant椋庢牸鐨刄RL鏄犲皠,濡?nbsp;@RequestMapping("/myPath/*.htm")
* 鍦ㄧ被灞傛鎸囧畾浜嗘槧灝勫悗,鍙互鍦ㄦ柟娉曞眰嬈″啀鎸囧畾鐩稿璺緞
*/
String[] value() default {};
/**
* 鎸囧畾HttpRequest鐨勬柟娉? 濡傦細(xì)GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE.
* 浣跨敤涓句緥錛?nbsp;@RequestMapping(value = "/add_activity", method = RequestMethod.GET)
*/
RequestMethod[] method() default {};
/**
* 鎸囧畾HttpRequest涓寘鍚殑鍙傛暟,浣跨敤鏂瑰紡濡備笅錛?br /> * @RequestMapping(value = "/something",params="myParam") 璇鋒眰鍖呭惈myParam鍙傛暟
* @RequestMapping(value = "/something",params="myParam=myValue")璇鋒眰鍖呭惈myParam鍙傛暟錛屽茍涓旇鍙傛暟鍊間負(fù)myValue
* @RequestMapping(value = "/something",params="!myParam") 璇鋒眰涓嶅寘鍚玬yParam鍙傛暟
*/
String[] params() default {};
/**
* 鎸囧畾HttpRequest涓寘鍚殑澶撮儴淇℃伅,浣跨敤鏂瑰紡濡備笅錛?br /> * @RequestMapping(value = "/something", headers="content-type")璇鋒眰鍖呭惈璇ュご閮?br /> * @RequestMapping(value = "/something", headers="content-type=text/*")璇鋒眰鍖呭惈鐗瑰畾鍊肩殑澶撮儴
* @RequestMapping(value = "/something", headers="!content-type")璇鋒眰涓嶅寘鍚澶撮儴
*/
String[] headers() default {};
}
娉細(xì)濡傛灉鍦ㄧ被灞傛鎸囧畾浜嗘槧灝勶紝鍒欐柟娉曞眰嬈′笂閮藉皢緇ф壙綾誨眰嬈$殑鏄犲皠
3銆佽幏鍙朒ttpRequest涓緱鍙傛暟
@RequestMapping("active")
public @ResponseBody boolean active(Long accountId) {
return accountService.activeAccount(accountId);
}
@RequestMapping("active")
public @ResponseBody boolean active(Account account) {
return accountService.activeAccount(accountId);
}
@RequestMapping("inactive")
public @ResponseBody boolean inactive(@RequestParam("accountId") Long accountId,
@RequestHeader("User-Agent") String userAgent,
@CookieValue("loginId") String loginId) {
return accountService.inactiveAccount(accountId);
}
@RequestMapping(value = "list/{pageNo}", method = RequestMethod.GET)
public String list(@PathVariable int pageNo) {
return "/account/list";
}
@RequestMapping(value = "add", method = RequestMethod.GET)
public String add(@RequestBody String body) {
return "/account/add";
}
active鏂規(guī)硶鐨勫叆鍙?accountId錛屽鏋滆姹備腑鏈夊悕涓?accountId鐨勫弬鏁幫紝鍒欎細(xì)榪涜榛樿緇戝畾錛屼笉浠呭熀鏈被鍨嬶紝javabean鐨勫睘鎬т篃鍙互榛樿榪涜緇戝畾錛?br />濡傛灉闇瑕佹槑紜粦瀹氾紝浣跨敤@RequestParam銆?涓鑸緩璁繘琛屾槑紜寚瀹氥?br />
3.1 @RequestParam 緇戝畾httpRequest涓弬鏁幫紝@RequestParam("accountId") 瀹屾暣褰㈠紡涓?nbsp; @RequestParam(value="accountId",required=true錛宒efaultValue=null)
3.2 @RequestHeader 緇戝畾httpRequest澶撮儴淇℃伅錛孈RequestHeader("User-Agent") 瀹屾暣褰㈠紡涓?@RequestHeader(value="User-Agebt",required=true, defaultValue=null)
3.3 @CookieValue 緇戝畾涓涓狢ookie鍊鹼紝@CookieValue("loginId") 瀹屾暣褰㈠紡涓?@CookieValue(value="loginId",required=true,defaultValue=null)
3.4 @RequestBody 灝唄ttpRequest鐨刡ody緇戝畾鍒版柟娉曞弬鏁頒笂
3.5 @ModelAttribute 鏈変袱縐嶄嬌鐢ㄦ柟寮? 1)鍦ㄦ柟娉曠駭鍒紝鎸囧畾鏂規(guī)硶鐨勮繑鍥炲肩粦瀹氬埌model涓紱 2錛夋柟娉曞弬鏁扮駭鍒紝鎸囧畾model涓殑鍊肩粦瀹氬埌鏂規(guī)硶鐨勫叆鍙備笂 紺轟緥濡備笅錛?br /> @ModelAttribute("countryList")
public List<String> getCountries() {
return new ArrayList<String>();
}
@RequestMapping(value = "search", method = RequestMethod.POST)
public String searchAccount(@ModelAttribute("accountId") Long accountId) {
return "/search";
}
4銆佷嬌鐢ˊResponseBody 鐢熸垚response
閫傜敤浜巜ebservice鐨勬暟鎹氦鎹紝鎴朼jax寮傛璇鋒眰錛宼ext銆乯son鎴栬厁ml鏍煎紡鐨勬暟鎹氦鎹€?br /> 渚嬪璁塊棶錛?http://localhost:8080/accounts/info.htm
@RequestMapping(value = "info")
public @ResponseBody Account getAccount() {
Account a = new Account();
a.setId(123L);
a.setName("zhangsan");
return a;
}
榪斿洖鏁版嵁濡備笅錛?{"name":"zhangsan","id":123}
浠庝笂闈緥瀛愬彲浠ョ湅鍑猴紝浣跨敤@ResponseBody鍚庯紝榪斿洖鐨刯avabean榛樿琚簭鍒楀寲鎴恓son鏍煎紡鐨勬暟鎹茍琚啓鍏ュ埌response body涓?br />
@Request 鍜?@ReponseBody 浣跨敤浜咹ttpMessageConverter鏈哄埗銆備笅闈㈡槸HttpMessageConverter鐨勭戶鎵夸綋緋匯?br />

甯哥敤鐨勬湁濡備笅鍑犱釜錛?br />StringHttpMessageConverter ---瀛楃涓?br />
MappingJacksonHttpMessageConverter ----json
ByteArrayHttpMessageConverter ----瀛楄妭鏁扮粍
MarshallingHttpMessageConverter -----xml
5銆佷嬌鐢ㄦā鏉挎妧鏈敓鎴恟esponse
閫傜敤浜庝竴鑸〉闈㈣姹傘傚彲浠ヤ嬌鐢╲elocity freemarker絳夋ā鏉挎妧鏈紝鍦╠ispatcher-servlet.xml涓渶瑕佽緗畍iewResolver銆?br /> @RequestMapping("/index")
public String index(ModelMap modelMap) {
modelMap.put("name", "liucs");
return "index";
}
@RequestMapping("/index")
public String index2(Model model) {
model.addAttribute("name","liucs");
return "index";
}
@RequestMapping("/index")
public ModelAndView index3() throws Exception {
ModelAndView mav = new ModelAndView("index");
mav.addObject("name", "liucs");
return mav;
}
濡備笂闈唬鐮乮ndex1鍜宨ndex2鎵紺猴紝涓嶄嬌鐢ˊResponseBody娉ㄨВ銆?榪斿洖涓涓猄tring綾誨瀷錛岃繖涓猄tring鏄痸iewname, 濡傛灉鏄噸瀹氬悜錛宺eturn "redirect:/index.htm".
鍏ュ弬鍙互鍖呭惈ModelMap鎴栬匨odel錛屽叾瀹炶繖涓よ呮槸涓涓笢瑗匡紝浣滅敤涓鏍楓備篃鍙互閲囩敤index3寮忕殑浼犵粺鍐欐硶錛岃繑鍥炰竴涓狹odelAndView瀵硅薄銆?br />6銆佹暟鎹獙璇?/span>
@InitBinder鏍囨敞
@InitBinder
public void myInitBinder(WebDataBinder binder){
binder.setDisallowedFields(new String[]{"id"});
}
閫氳繃鍦ㄦ柟娉曚腑澹版槑涓涓狟indingResult鍙傛暟鏉ュ惎鍔ㄧ粦瀹氬拰楠岃瘉
@RequestMapping("update")
public void update(@ModelAttribute("account") Account account,BindingResult bindResult) {
if(bindResult.hasErrors()){
//……
}
}
闇瑕佹敞鎰忎互涓嬮檺鍒訛細(xì)
1銆丅indingResult鍙傛暟蹇呴』璺熷湪涓涓狫avaBean鍙傛暟鍚庨潰
2銆侀敊璇細(xì)琚嚜鍔ㄧ殑緇戝畾鍒癿odel涓紝渚夸簬娓叉煋妯℃澘鏃朵嬌鐢?br />3銆佷笉鏀寔@RequestBody絳夌被鍨嬬殑鍙傛暟褰㈠紡
7銆佸紓甯稿鐞?/span>
@ExceptionHandler