zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【高并发】面试官问我:为什么局部变量是线程安全的?
    Java中的String到底占用多大的内存空间?你所了解的可能都是错误的!!
    【高并发】学好并发编程,关键是要理解这三个核心问题
    【高并发】高并发分布式锁架构解密,不是所有的锁都是分布式锁!!
    12张图带你彻底理解分布式事务产生的场景和解决方案!!
    【高并发】面试官:讲讲高并发场景下如何优化加锁方式?
    【高并发】秒杀系统架构解密,不是所有的秒杀都是秒杀(升级版)!!
    十一长假我肝了这本超硬核PDF,现决定开源!!
    一文搞懂PV、UV、VV、IP及其关系与计算
    我把这个贼好用的Excel导出工具开源了!!
  • 原文地址:https://www.cnblogs.com/enjoyjava/p/8998835.html
Copyright © 2011-2022 走看看