springBoot01-helloworld-完成一个简单的RESTful API


1、访问http://start.spring.io/

2、选择构建工具Maven Project、Spring Boot版本 2.0.1,以及一些工程基本信息 ,最后点击Generate Project生成项目

 

3.下载后解压,导入maven项目:

项目结构如下(controller和domain包是后加的):需要注意的是,自己新建的包,必须放在 项目入口类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     <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>
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>spring-boot-starter</artifactId>
31         </dependency>
32 
33         <dependency>
34             <groupId>org.springframework.boot</groupId>
35             <artifactId>spring-boot-starter-test</artifactId>
36             <scope>test</scope>
37         </dependency>
38         <!-- web项目,添加web依赖 -->
39         <dependency>
40             <groupId>org.springframework.boot</groupId>
41             <artifactId>spring-boot-starter-web</artifactId>
42         </dependency>
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:核心模块,包括自动配置支持、日志和YAML
  • spring-boot-starter-test:测试模块,包括JUnit、Hamcrest、Mockito 

需要注意的是pom文件中的parent元素,里边定义了版本号,所以pom文件里 dependency 依赖都可以不用写版本号,这个parent 的作用就是规定了要使用的jar包的版本编号

5.编写自己的controller (在domain包下新建一个User 类的Javabean)

 1 package com.lch.springboot01.domain;
 2 
 3 public class User {
 4     private String userName;
 5     private String passWord;
 6 
 7     public String getUserName() {
 8         return userName;
 9     }
10 
11     public void setUserName(String userName) {
12         this.userName = userName;
13     }
14 
15     public String getPassWord() {
16         return passWord;
17     }
18 
19     public void setPassWord(String passWord) {
20         this.passWord = passWord;
21     }
22 }

 

 1 package com.lch.springboot01.controller;
 2 
 3 import org.springframework.web.bind.annotation.RequestMapping;
 4 import org.springframework.web.bind.annotation.RestController;
 5 
 6 import com.lch.springboot01.domain.User;
 7 
 8 @RestController
 9 public class HelloController {
10     @RequestMapping("/hello")
11     public String index() {
12         return "hello world";
13     }
14 
15     @RequestMapping("/getUser")  //测试返回json字符串
16     public User getUser() {
17         User user = new User();
18         user.setUserName("小明");
19         user.setPassWord("123");
20         return user;
21     }
22 
23

6. 切换到Springboot01Application 类下面,直接点击运行,可以看到控制台上打印了springboot的图案(注意,只有Springboot01Application 这个类才是入口类,不能在其他类下面启动项目,会报错)

 

启动完成后,可以看到所使用的容器,端口号,以及上下文路径 context path

7.在浏览器输入http://localhost:8080/hello 进行访问,可以看到页面输出 hello world 。

接着在浏览器输入  http://localhost:8080/getUser 进行访问,可以看到页面输出json字符串格式的user对象。至此,一个springboot入门例子就完成了

按F12打开浏览器的调试界面,F5刷新,再次访问,点击Headers,可以看到这次请求默认是get请求,响应是json格式并且字符编码为UTF-8

切换到response 界面,可以看到本次请求的原始响应信息,这在开发过程中调试代码会有帮助

8.上面小例子用到的注解说明

 (1)入口类和 @SpringBoopplication 注解
Sping Boot通常有一个名为pplication的入口类,入口类里有一个 main方法,这个main方法,其实就是一个标准的Java应用的入口方法。在main方法中使用SpringApplication.nun( Springboot01Application, args) ,启动Spring Boot应用项目。
@SpringBoopplication是Spring Boot的核心注解,它是一个组合注解(顺便说一下,注解最大的用处就是反射调用!!!),源码如下:
 1 @Target(ElementType.TYPE)
 2 @Retention(RetentionPolicy.RUNTIME)
 3 @Documented
 4 @Inherited
 5 @SpringBootConfiguration
 6 @EnableAutoConfiguration
 7 @ComponentScan(excludeFilters = {
 8         @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
 9         @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
10 public @interface SpringBootApplication {
11 
12     @AliasFor(annotation = EnableAutoConfiguration.class)
13     Class<?>[] exclude() default {};
14 
15 
16     @AliasFor(annotation = EnableAutoConfiguration.class)
17     String[] excludeName() default {};
18 
19 
20     @AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
21     String[] scanBasePackages() default {};
22 
23     @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
24     Class<?>[] scanBasePackageClasses() default {};
25 
26 }

  注意,黄底标注部分,就是这个注解的定义: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 注解的作用是,让Controller中的方法都以json的格式返回给 请求发起者

spring boot 使用@RestController 来返回json格式的数据给前端页面。@RestController 就等价于Spring MVC中的 @RequestMapping 注解和 @ResponseBody 同时标注

 示例代码下载地址 

https://github.com/liuch0228/springboot.git

 

 

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 


作者:清风拂来,发布于:2018/08/29
原文:https://www.cnblogs.com/enjoyjava/p/8998835.html