(1)新建Marven工程
可以使用https://start.spring.io/ 网站来快速的生成一个spring boot的模板程序,包含了spring boot的基本结构或者使用下 面的新建工程向导
选择新建工程的Marven选项,archetype可以选择默认点击下一步
设置下项目的GroupID,ArtifactID,Version
(2)工程结构
工程结构图如下,工程目录主要包括src程序目录,resources 资源目录其中在资源目录中新建application.properties程序默认配置文件,pom.xml 配置依赖的库文件 由于使用了maven 保持src下main和test的目录结构
4.0.0
com.hisense
SpringbootPractice1
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-parent
2.0.3.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
com.jayway.jsonpath
json-path
test
1.8
org.springframework.boot
spring-boot-maven-plugin
spring-releases
https://repo.spring.io/libs-release
spring-releases
https://repo.spring.io/libs-release
spring-boot-starter-web添加了Tomcat和Spring MVC
spring-boot-starter 模板:核心模块,包括自动配置支持、日志和YAML
spring-boot-starter-web 模块:web模块
对于copy过来的pom.xml依赖文件,默认系统不会再自动下载需要的类库,点击idea->视图->工具窗口->marven工程菜单打开marven Project 窗口,点击刷新按钮便可下载依赖的库文件
在src目录中创建文件GreetingController.java ,作为web访问的资源控制器处理get请求, @RestController 注解类表明此类实现SpringBoot的web rest访问功能,类中的Greeting函数使用了注解 @RequestMapping("/greeting") 代表可以使用 “网址/greeting” 的形式访问此函数,返回的类Greeting 会被SpringBoot自动序列号为json字符串返回给调用者。
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.atomic.AtomicLong;
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
Greeting函数没有明确GET
vs. PUT
, POST ,所有的对/greeting的请求都会进入此方法,因为@RequestMapping
映射所有的http操作, 可以使用@RequestMapping(method=GET)
to 明确get映射
@RestController注解 等价于 @Controller+@ResponseBody 将返回值已json形式返回
Spring’s MappingJackson2HttpMessageConverter
会自动被选择 转换 Greeting
到JSON.
其中使用的Greeting类定义为
package hisense;
public class Greeting {
private final long id;
private final String content;
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
public long getId() {
return id;
}
public String getContent() {
return content;
}
}
3 浏览器测试
在src目录下创建HelloBoot.java 程序入口类
注意:Application启动类文件一定要放在包的最外侧,而且必须放在包下面,不允许直接的根目录,从application路径下可以搜索到所有的子包
原因:spring-boot会自动加载启动类所在包下及其子包下的所有组件.例如一下的结构
package hisense;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloBoot {
public static void main(String[] args) {
SpringApplication.run(HelloBoot.class, args);
}
}
@SpringBootApplication
注解类方便的自动添加了下面所有的注解:
@Configuration
tags the class as a source of bean definitions for the application context.
@EnableAutoConfiguration
tells Spring Boot to start adding beans based on classpath settings, other beans, and various property settings.
Normally you would add @EnableWebMvc
for a Spring MVC app, but Spring Boot adds it automatically when it sees spring-webmvc on the classpath. This flags the application as a web application and activates key behaviors such as setting up a DispatcherServlet
.
@ComponentScan
tells Spring to look for other components, configurations, and services in the hello
package, allowing it to find the controllers.
运行程序后
在浏览器三种输入localhost:8080/greeting 或者 http://localhost:8080/greeting?name=User 使用get 请求访问rest接口 /greeting,在访问网址中可以带用name参数
可以看到如下结果
{"id":1,"content":"Hello, World!"}
我们只需要在在资源文件夹resources内创建 application.properties配置文件
在里面加入 server.port=8004
server.port=8081
这样便可以使用localhost:8004/greeting来进行访问了。