springBoot01-helloworld-完成一个简单的RESTful API
1、访问http://start.spring.io/
2、选择构建工具Maven Project、Spring Boot版本 2.0.1,以及一些工程基本信息 ,最后点击Generate Project生成项目
3.下载后解压,导入maven项目:
项目结构如下(controller是后加的):需要注意的是,自己新建的包,必须是项目入口类Springboot01Application 所在包的里面!
如上图所示,Spring Boot的基础结构共三个文件:
- src/main/java 程序开发以及主程序入口
- src/main/resources 配置文件
- src/test/java 测试程序
另外,spingboot建议的目录结果如下: 假设root package结构为:com.example.myproject ,那么包和类的层级关系按照如下约定来建立!这一点很重要,否则你的应用可能起不来!
com +- example +- myproject +- Application.java | +- domain | +- Customer.java | +- CustomerRepository.java | +- service | +- CustomerService.java | +- controller | +- CustomerController.java |
- 1、Application.java 建议放到根目录下面,主要用于做一些框架配置
- 2、domain目录主要用于实体(Entity)与数据访问层(Repository)
- 3、service 层主要是业务类代码
- 4、controller 负责页面访问控制
采用默认配置可以省去很多配置,当然也可以根据自己的喜欢来进行更改
4. 由于是web应用,在pom文件中 添加web依赖
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 6 <groupId>com.lch</groupId> 7 <artifactId>springboot01</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 <packaging>jar</packaging> 10 11 <name>springboot01</name> 12 <description>Demo project for Spring Boot</description> 13 14 <strong> <parent> 15 <groupId>org.springframework.boot</groupId> 16 <artifactId>spring-boot-starter-parent</artifactId> 17 <version>2.0.1.RELEASE</version> 18 <relativePath/> <!-- lookup parent from repository --> 19 </parent></strong> 20 21 <properties> 22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 23 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 24 <java.version>1.8</java.version> 25 </properties> 26 27 <dependencies> 28 <dependency> 29 <groupId>org.springframework.boot</groupId> 30 <artifactId><strong>spring-boot-starter</strong></artifactId> 31 </dependency> 32 33 <dependency> 34 <groupId>org.springframework.boot</groupId> 35 <artifactId><strong>spring-boot-starter-test</strong></artifactId> 36 <scope>test</scope> 37 </dependency> 38 <strong> <!-- web项目,添加web依赖 --></strong> 39 <strong><dependency> 40 <groupId>org.springframework.boot</groupId> 41 <artifactId>spring-boot-starter-web</artifactId> 42 </dependency></strong> 43 </dependencies> 44 45 <build> 46 <plugins> 47 <plugin> 48 <groupId>org.springframework.boot</groupId> 49 <artifactId>spring-boot-maven-plugin</artifactId> 50 </plugin> 51 </plugins> 52 </build> 53 54 55 </project>
当前的pom.xml
内容如下,仅引入了两个模块:然后手动添加web的依赖
spring-boot-starter
:核心模块,包括自动配置支持、日志和YAMLspring-boot-starter-test
:测试模块,包括JUnit、Hamcrest、Mockito
需要注意的是pom文件中的parent元素,里边定义了版本号,所以pom文件里dependency 依赖都可以不用写版本号,这个parent 的作用就是规定了要使用的jar包的版本编号
5.编写自己的controller
package com.lch.springboot01.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; <strong> @RestController </strong> public class HelloController { <strong> @RequestMapping("/hello") </strong> public String index() { return "hello world"; } }
6. 切换到Springboot01Application 类下面,直接点击运行,可以看到控制台上打印了springboot的图案(注意,只有Springboot01Application 这个类才是入口类,不能在其他类下面启动项目,会报错)
启动完成后,可以看到所使用的容器,端口号,以及上下文路径 context path
7.在浏览器输入http://localhost:8080/hello 进行访问,可以看到页面输出 hello world 。至此,一个springboot入门例子就完成了
8.上面小例子用到的注解说明
(1)入口类和@SpringBoopplication 注解SpingBoot通常有一个名为pplication的入口类,入口类里有一个main方法,这个main方法,其实就是一个标准的Java应用的入口方法。在main方法中使用SpringApplication.nun( Springboot01Application,args),启动SpringBoot应用项目。
@SpringBoopplication是SpringBoot的核心注解,它是一个组合注解(顺便说一下,注解最大的用处就是反射调用!!!),源码如下:
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) <strong>public @interface</strong><strong> SpringBootApplication</strong> { @AliasFor(annotation = EnableAutoConfiguration.class) Class<?>[] exclude() default {}; @AliasFor(annotation = EnableAutoConfiguration.class) String[] excludeName() default {}; @AliasFor(annotation = ComponentScan.class, attribute = "basePackages") String[] scanBasePackages() default {}; @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses") Class<?>[] scanBasePackageClasses() default {}; }
注意,黄底标注部分,就是这个注解的定义:public @interface SpringBootApplication ,把@去掉,就是接口,写成@interface,就是注解的定义
如果不想使用@SpringBootApplication 注解,可以直接在入口类上使用@Configuratoin 、@EnableAutoConfiguration 、@ComponentScan 注解。其中@EnableAutoConfiguration 让Springboot根据类路径中的jar包依赖为当前项目进行自动配置。例如,添加了spring-boot-starter-web 依赖,会自动添加Tomcat 和SpingMVC的依赖,那么springboot会对Tomcat和SpringMVC进行自动配置。
springboot会自动扫描@SpringBootApplication 所在类的同级的包以及下级包里面的Bean,这一点很重要( 若为JPA项目,还可以扫描标注@Entity 的实体类,建议入口类放置的位置在groupId+ariifactID组合的包名下。) 因此,自己所写的代码,应放置在 跟 Springboot01Application 这个启动类平级的包里面!即按照上面第3步中spirngboot建议的包目录结构,如下图:
(2)@RestController
spring boot 使用@RestController 来返回json格式的数据给前端页面。@RestController 就等价于Spring MVC中的 @RequestMapping 注解和 @ResponseBody 同时标注
把helloController进行如下修改:
@Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String index() { return "hello world" + "用springMVC方式返回json数据"; } }
再次访问如下: