spring boot rest 服务

版权声明: https://blog.csdn.net/qq_35193093/article/details/87967432

使用Spring Boot REST服务可以节省编写框架组件和样板代码的时间。

在此文中,我们将从头编写自己的Spring Boot REST 服务。当你希望专注于你的业务而不是花时间编写框架组件和样板代码,Spring Boot的自动配置带来很大的便利。

今天,我们将创建一个简单的RESTful服务。首先,让我们编写第一个Dog服务。创建Spring Boot项目的最快的方式就是使用Spring Initializr。

教程大纲:

  1. 创建一个Spring Boot项目

  2. 模拟数据来源

  3. 使用GET,POST,DELETE方法创建Dogs控制器。

  4. 查看Dogs服务的运行情况

注意:

  • 使用模拟数据库代替真实的数据

  • 这里有一篇关于 Spring REST 服务异常处理的文章

  • 将单元测试排除在范围之外。(我们将在单独的教程中介绍REST服务的测试)。

1. 创建Spring Boot项目

让我们来编写基本的项目组件。

1.1 build.gradle

到目前为止,我们已经添加了spring-boot-starter-web—表示我们希望构建web应用程序—和Lombok依赖项。

Lombok 帮助您摆脱典型的样板式代码,我一直很喜欢使用它。我通常使用Lombok来避免编写构造函数、getter、setter等。访问Project Lombok以获得更多信息。

buildscript 
{
    ext 
{
        springBootVersion 
=
 
'2.1.0.RELEASE'
    
}
    repositories 
{
        mavenCentral
()
    
}
    dependencies 
{
        classpath
(
"org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
)
    
}
}
apply plugin
:
 
'java'
apply plugin
:
 
'eclipse'
apply plugin
:
 
'org.springframework.boot'
apply plugin
:
 
'io.spring.dependency-management'
group 
=
 
'com.amitph.spring'
version 
=
 
'0.0.1-SNAPSHOT'
sourceCompatibility 
=
 
1.8
repositories 
{
    mavenCentral
()
}
dependencies 
{
    implementation
(
'org.springframework.boot:spring-boot-starter-web'
)
    compile
(
'org.projectlombok:lombok:1.18.4'
)
    testImplementation
(
'org.springframework.boot:spring-boot-starter-test'
)
}

1.2 Application.java

这是我们的启动点t — Application.java 有void的main方法, 我们能通过它启动Spring Boot程序。

@SpringBootApplication

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

此时,您已经启动并运行了Spring Boot应用程序。您可以通过像运行任何其他Java类一样运行Application.java来确认,并查看服务器是否启动并监听端口8080(可配置)。 .

2. 模拟数据提供商

首先,让我们在应用程序中启动并创建服务和数据层。如上所述,本教程中不会有实际的数据存储,但是我们将使用模拟数据提供程序,它将作为我们需要的数据存储。

2.1 MockDogProvider

模拟Dog的提供者有一个实例级预填充的Dog的列表。类中的各种CRUD方法实际上在Dogs列表上执行操作。

@Component

public class MockDogProvider {

private List<Dog> mockDogStore;

public MockDogProvider() {

mockDogStore = new ArrayList<>();

mockDogStore.add(Dog.of(1, "Benji", 10));

mockDogStore.add(Dog.of(2, "Baxter", 9));

mockDogStore.add(Dog.of(3, "Brinkley", 8));

mockDogStore.add(Dog.of(4, "Daisy", 10));

mockDogStore.add(Dog.of(5, "Cujo", 12));

}

public List<Dog> getDogs() {

return mockDogStore;

}

public Dog findDogById(long id) {

for (Dog dog : mockDogStore) {

if (dog.getId() == id) {

return dog;

}

}

return null;

}

public void add(DogDto dto) {

mockDogStore.add(Dog.of(dto.getId(), dto.getName(), dto.getAge()));

}

public void delete(long id) {

int idx = 0;

for (; idx < mockDogStore.size(); idx++) {

if (mockDogStore.get(idx).getId() == id) {

break;

}

}

mockDogStore.remove(idx);

}

}

2.2 DogsService

Dogs服务是web应用程序的一个常规服务层。它只是解耦了控制器和数据提供程序。因为不涉及业务逻辑,所以它只是将调用委托给数据提供程序。

3. 控制器

到这里我们快完成了。我们最终需要的是一个控制器,它处理REST调用并将其委托给服务。

 
  1. @RestController

  2. @RequestMapping("/dogs")

  3. @RequiredArgsConstructor

  4. @Setter

  5. public class DogsController {

  6. @Autowired private final DogsService service;

  7. @GetMapping

  8. public List<Dog> getDogs() {

  9. return service.getDogs();

  10. }

  11. @PostMapping

  12. public void postDogs(@RequestBody DogDto dto) {

  13. service.add(dto);

  14. }

  15. @GetMapping("/{id}")

  16. public Dog getById(@PathVariable(required = true) long id) {

  17. return service.getDogById(id);

  18. }

  19. @DeleteMapping("/{id}")

  20. public void delete(@PathVariable(required = true) long id) {

  21. service.delete(id);

  22. }

  23. }

4. 启动应用程序

4.1 获取所有的Dogs

打开浏览器输入下面地址(GET)

 
  1. http://localhost:8080/dogs

下面输出:

 

[

{

"id":1,

"name":"Benji",

"age":10

},

{

"id":2,

"name":"Baxter",

"age":9

},

{

"id":3,

"name":"Brinkley",

"age":8

},

{

"id":4,

"name":"Daisy",

"age":10

},

{

"id":5,

"name":"Cujo",

"age":12

}

]

4.2 根据ID获取Dog

让我们做一个GET请求:

http://localhost:8080/dogs/3输出:

 

{

"id":3,

"name":"Brinkley",

"age":8

}

4.3 添加新的Dog

这是一个POST请求,我将使用curl进行调用。

 

curl -X POST \

http://localhost:8080/dogs \

-H 'Content-Type: application/json' \

-H 'Postman-Token: c6813aea-146c-49cd-9eba-1370aad4bff9' \

-H 'cache-control: no-cache' \

-d '{

"id": 6,

"name": "Hooch",

"age": 11

}'

再次执行GET /dogs之后,您将看到添加了一个新的dog。

4.4 删除一个 Dog

这是一个使用curl的删除请求.

 

curl -X DELETE \

http://localhost:8080/dogs/5 \

-H 'Content-Type: application/json' \

-H 'Postman-Token: b4b93304-7ee7-45c2-917b-c3bc2985a250' \

-H 'cache-control: no-cache

执行此之后,您应该看到id 为5的Dog从列表中删除了。

猜你喜欢

转载自blog.csdn.net/qq_35193093/article/details/87967432