@Controller 處理http請求
@Controller
//@ResponseBody
public class HelloController {html
@RequestMapping(value="/hello",method= RequestMethod.GET)
public String sayHello(){
return "hello";
}
}
若是直接使用@Controller這個註解,當運行該SpringBoot項目後,在瀏覽器中輸入:local:8080/hello,會獲得以下錯誤提示: web
出現這種狀況的緣由在於:沒有使用模版。即@Controller 用來響應頁面,@Controller必須配合模版來使用。spring-boot 支持多種模版引擎包括:
1,FreeMarker
2,Groovy
3,Thymeleaf (Spring 官網使用這個)
4,Velocity
5,JSP (貌似Spring Boot官方不推薦,STS建立的項目會在src/main/resources 下有個templates 目錄,這裏就是讓咱們放模版文件的,而後並無生成諸如 SpringMVC 中的webapp目錄)spring
本文以Thymeleaf爲例介紹使用模版,具體步驟以下:json
第一步:在pom.xml文件中添加以下模塊依賴:瀏覽器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
第二步:修改控制器代碼,具體爲:app
/**
* Created by wuranghao on 2017/4/7.
*/
@Controller
public class HelloController {webapp
@RequestMapping(value="/hello",method= RequestMethod.GET)
public String sayHello(){
return "hello";
}
}
第三步:在resources目錄的templates目錄下添加一個hello.html文件,具體工程目錄結構以下:spring-boot
其中,hello.html文件中的內容爲:post
<h1>wojiushimogui</h1>
這樣,再次運行此項目以後,在瀏覽器中輸入:localhost:8080/helloui
就能夠看到hello.html中所呈現的內容了。
所以,咱們就直接使用@RestController註解來處理http請求來,這樣簡單的多。
@RestController
Spring4以後新加入的註解,原來返回json須要@ResponseBody和@Controller配合。
即@RestController是@ResponseBody和@Controller的組合註解。
@RestController
public class HelloController {
@RequestMapping(value="/hello",method= RequestMethod.GET)
public String sayHello(){
return "hello";
}
}
與下面的代碼做用同樣
@Controller
@ResponseBody
public class HelloController {
@RequestMapping(value="/hello",method= RequestMethod.GET)
public String sayHello(){
return "hello";
}
}
@RequestMapping 配置url映射
@RequestMapping此註解便可以做用在控制器的某個方法上,也能夠做用在此控制器類上。
當控制器在類級別上添加@RequestMapping註解時,這個註解會應用到控制器的全部處理器方法上。處理器方法上的@RequestMapping註解會對類級別上的@RequestMapping的聲明進行補充。
看兩個例子
例子一:@RequestMapping僅做用在處理器方法上
@RestController
public class HelloController {
@RequestMapping(value="/hello",method= RequestMethod.GET)
public String sayHello(){
return "hello";
}
}
以上代碼sayHello所響應的url=localhost:8080/hello。
例子二:@RequestMapping僅做用在類級別上
/**
* Created by wuranghao on 2017/4/7.
*/
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(method= RequestMethod.GET)
public String sayHello(){
return "hello";
}
}
以上代碼sayHello所響應的url=localhost:8080/hello,效果與例子一同樣,沒有改變任何功能。
例子三:@RequestMapping做用在類級別和處理器方法上
/**
* Created by wuranghao on 2017/4/7.
*/
@RestController
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(value="/sayHello",method= RequestMethod.GET)
public String sayHello(){
return "hello";
}
@RequestMapping(value="/sayHi",method= RequestMethod.GET)
public String sayHi(){
return "hi";
}
}
這樣,以上代碼中的sayHello所響應的url=localhost:8080/hello/sayHello。
sayHi所響應的url=localhost:8080/hello/sayHi。
從這兩個方法所響應的url能夠回過頭來看這兩句話:當控制器在類級別上添加@RequestMapping註解時,這個註解會應用到控制器的全部處理器方法上。處理器方法上的@RequestMapping註解會對類級別上的@RequestMapping的聲明進行補充。
最後說一點的是@RequestMapping中的method參數有不少中選擇,通常使用get/post.
屬性參數示例
@RequestMapping
(value = {
"/modifyGet.do"
,
"/modifyGet1.do"
}, method={RequestMethod.POST, RequestMethod.GET},
consumes={
"application/json"
}, produces={
"application/json"
}, params={
"name=mike"
,
"pwd=123456"
},headers={
"a=1"
})
method 若是定義了某一種或多種請求方式,則只能已定義的方式進行請求,若沒定義則各類方式都可請求。
小結
本篇博文就介紹了下@Controller/@RestController/@RequestMappping幾種經常使用註解,下篇博文將介紹幾種如何處理url中的參數的註解@PathVaribale/@RequestParam/@GetMapping。
其中,各註解的做用爲:
@PathVaribale 獲取url中的數據
@RequestParam 獲取請求參數的值
@GetMapping 組合註解