logo头像

分享技术,品味人生

SpringBoot

SpringBoot

[!tip] 本文简要说明

  • 1)、spring boot的helloworld项目构建
  • 2)、postman进行接口调试
  • 3)、集成lombok,免去get、set函数的编写,避免后续增补字段没及时同步的bug生成
  • 4)、集成swagger2和swagger2-ui,简化postman的接口调试及接口发布工作

一、HelloWorld项目

1、IDEA创建项目并测试

  • 新建项目选择Spring Initalizr,勾选spring web依赖,

image-20220527103105812

image-20220527103111440

<!-- pom文件中的parent继承来自boot -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.0</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
    <!-- 这里是上面勾选了spring web的默认生成 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
  • 2)maven的依赖因网速问题可选择阿里云镜像加速,具体操作,请翻看java基础文档中的设置

  • 3)添加测试程序,进行web访问

package com.example.springwebdemo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @GetMapping("/test")
    public String test(){
        return "hello spring boot";
    }
}

image-20220527104026813

二、postman进行接口调试

本文参考了油管的介绍,How to add Swagger to Spring Boot - Brain Bytes - YouTube

更多接口调试工具,参考这里: 这些年我用过的API文档工具,个个是精品! - 知乎 (zhihu.com)

1、postman测试test接口

==注意:==这里因为使用的是无参数的helloworld接口,只需选择get方法,一般都能出结果!

image-20220527104254576

2、项目添加完整的get、post方法,方便测试

  • 1)、添加bean

    注:这里用了lombok,避免手写get/set的麻烦和bug,实际后台还是有这代码,具体lombok使用参看下面的章节,这里不赘述

    package com.example.springwebdemo.controller;
    
    import lombok.Data;
    
    @Data
    public class Contact {
        private String id;
        private String name;
        private String phone;
    }
    
  • 2)、添加controller

注:这里有三个接口,分别是post提交bean数据到内存中,get/取得所有数据,get{id}取得单个数据

package com.example.springwebdemo.controller;

import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * @className: TestController
 * @description: srping boot test
 * @author: eric 4575252@gmail.com
 * @date: 5/25/2022 3:56 PM
 **/
@RestController
@RequestMapping("/api")
public class AddressBookResource {

    ConcurrentMap<String, Contact> contacts = new ConcurrentHashMap<>();

    /***
     * @description: springboot Test
     * @return: java.lang.String
     * @author: eric 4575252@gmail.com
     * @date: 2022-05-25, Wed, 15:58
     */
    @GetMapping("/{id}")
    public Contact getContact(@PathVariable String id){
        return contacts.get(id);
    }

    @GetMapping("/")
    public List<Contact> getAllContacts(){
        return new ArrayList<Contact>(contacts.values());
    }

    @PostMapping("/")
    public Contact addContact(@RequestBody Contact contact){
        contacts.put(contact.getId(),contact);
        return contact;
    }
}
  • 3)、pm测试post接口进行数据提交

注意:post提交因根据当前json格式所需,调整head,这里有两种调整方式,如下

image-20220527105957344

效果如下:

image-20220527110036782

  • 4)、pm测试getAll接口取得所有数据(这个比较简单,注意下选的是GET,路径尾部要有/)

    image-20220527110246469

  • 5)、pm测试get单接口取得单个数据(效果同上,主要是url有些差异,要带上string ID)

image-20220527110457434

3、集成lombok

为啥要引入 lombok

仅五个字符 (*@*Data) 就可以替换数百行代码从而产生干净,简洁且易于维护的 Java 类。

  • *@*Setter :注解在类或字段,注解在类时为所有字段生成 setter 方法,注解在字段上时只为该字段生成 setter 方法。
  • *@*Getter :使用方法同上,区别在于生成的是 getter 方法。
  • *@*ToString :注解在类,添加 toString 方法。
  • *@*EqualsAndHashCode:注解在类,生成 hashCode 和 equals 方法。
  • *@*NoArgsConstructor:注解在类,生成无参的构造方法。
  • *@*RequiredArgsConstructor:注解在类,为类中需要特殊处理的字段生成构造方法,比如 final 和被*@*NonNull注解的字段。
  • *@*AllArgsConstructor:注解在类,生成包含类中所有字段的构造方法。
  • *@*Data:注解在类,生成 setter/getter、equals、canEqual、hashCode、toString 方法,如为 final 属性,则不会为该属性生成 setter 方法。
  • *@*Slf4j:注解在类,生成 log 变量,严格意义来说是常量。
<!-- pom依赖 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
  • bean中要增加@Data的注入和引用!
package com.example.springwebdemo.controller;

import lombok.Data;

@Data
public class Contact {
    private String id;
    private String name;
    private String phone;
}

4、集成swagger2和swagger2-ui

  • 1)、集成swagger2, 版本来源mvnrepository上查询使用人数最多的2.9.2 Maven Repository
<!-- pom依赖 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
#application.yml 没有这个的话会因为孙子辈依赖的版本不一致导致报错
spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

==注意==:这里要对spring boot入口程序开启swagger2

package com.example.springwebdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@SpringBootApplication
@EnableSwagger2
public class SpringWebDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringWebDemoApplication.class, args);
    }

}

用pm或浏览器访问 /v2/api-docs可看到自动识别出来的接口信息

image-20220527111252375

  • 2)、集成swagger2-ui,实现web中类似postman对接口的测试和api检索, ==当然这里所有的配置都依赖上一步的配置==
<!-- pom依赖 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

注:操作基本等同postman,这里不赘述

image-20220527111708374

三、集成到docker

  • 对idea的项目进行maven的package,然后将文件上传到linux宿主机某个目录,执行下方脚本进行Dockerfile设置、打包、运行,然后web测试
tee Dockerfile <<-'EOF'
FROM java:8-alpine
MAINTAINER eric<4575252@gmail.com>
EXPOSE 8080
ADD demo.jar demo.jar
ENTRYPOINT ["java","-jar","demo.jar"]
EOF

docker build -t demo:1.0 .

docker run -p 8081:8080 --rm -d --name demo2 demo:1.0

评论系统未开启,无法评论!