Spring Boot 2.x 最佳实践之 Spring WebMVC集成
这节课来讲解下 Spring Boot 集成Web 实现Restful 风格的API 。
1.添加项目依赖
如果想进行Web应用开发,那么我们则需要在pom.xml依赖中引入了spring-boot-starter-web,它包含了Spring Boot预定义的一些Web开发的常用依赖
- spring-web, spring-webmvc Spring WebMvc框架
- tomcat-embed-* 内嵌Tomcat容器
- jackson 处理json数据
- spring-* Spring框架
- spring-boot-autoconfigure Spring Boot提供的自动配置功能
<!-- Web应用开发 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
注意:
内嵌容器如果不想使用Tomcat 想使用Jetty,那么需要修改依赖如下:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency>
- 以上依赖排除掉了默认的内嵌容器Tomcat
- 然后引用了新的依赖Jetty 内嵌容器
- 其次值得注意的是,凡是spring-boot-starter 开头的都传递依赖了
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
因此就算不显式指定该依赖也不会报错
2. application-dev.properties 配置如下
# 基础配置
# 配置当前应用程序的名称,选填 可不配置
spring.application.name=spring-boot-with-web
# 内嵌容器参数配置
# 配置应用程序的访问端口 选填 不配置默认是8080
server.port=8080
# 配置应用程序的IP,选填
server.address=127.0.0.1
# 配置应用程序的上下文
server.servlet.context-path=/
3. 创建我们的Controller
该模块常用的几种方法如下所示:
import org.springframework.web.bind.annotation.*;
/**
* @author 星云
*/
@RestController
public class HomeController {
/**
* 最基础的拦截/ 返回字符串
* @return
*/
@GetMapping(value = "/")
public String homePage(){
return "Hello Home Page";
}
/**
* 同时拦截多个URL
* @return
*/
@GetMapping(value = {"/hi.do","/hello.do"})
public String helloPage(){
return "Hello Page";
}
/**
* 组合注解
* @RequestMapping(value = "/test.do",method = RequestMethod.GET)
* @GetMapping(value = "/test.do")组合注解,等价于上面这种写法
* @return
*/
@GetMapping(value = "/test.do")
public String testPage(){
return "Hello Test get Page";
}
/**
* @RequestMapping(value = "/test2.do",method = RequestMethod.POST)
* @PostMapping(value = "/test2.do")组合注解,等价于上面这种写法
* @return
*/
@PostMapping(value = "/test2.do")
public String test2Page(){
return "Hello Test post Page";
}
/**
* 传统风格带参数的URL
* 访问http://127.0.0.1:8080/url/b?id=18
* @param uid
* @return
*/
@GetMapping(value = "/url/b")
public String urlWithQuestion(@RequestParam(value = "id",required = false,defaultValue = "0") Integer uid) {
return "Hello URL -----/url/b?id=" + uid;
}
/**
* 访问http://127.0.0.1:8080/url/c.do
* @param uid
* @return
*/
@PostMapping(value = "/url/c.do")
public String urlWithQuestionPost(@RequestParam(value = "id",required = false,defaultValue = "0") Integer uid){
return "Hello URL -----/url/c.do post:"+uid;
}
/**
* Restful 风格带参数的URL
* 访问http://127.0.0.1:8080/url/a/18
* @param uid
* @return
*/
@GetMapping(value = "/url/a/{id}")
public String urlWithParams(@PathVariable("id") Integer uid){
return "Hello URL -----url/a/***------id="+uid;
}
}
注:如果不使用@RestController 返回JSON,则需要这样做:
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class TestController { @ResponseBody @RequestMapping(value = "/test.do",method = RequestMethod.GET) public String testMethod(){ return "Hello Controller"; } }
4. 源码下载
本篇完~