白骑士的Java教学项目实战 8.4 开发一个Java RESTful API

65 篇文章 0 订阅

        在本章节中,我们将通过开发一个简单的Java RESTful API来进一步提升Java开发技能。我们将使用Spring Boot框架来构建这个API,它将提供基本的CRUD(创建、读取、更新和删除)功能,用于管理任务。通过这个项目,你将学习如何使用Spring Boot创建RESTful服务、处理HTTP请求、与数据库交互以及编写单元测试。通过这个项目,你将全面掌握Java Web服务开发的基础知识和实践技巧。

项目需求

        我们的目标是开发一个简单的任务管理RESTful API,具有以下功能:

  • 创建任务
  • 查看所有任务
  • 查看单个任务
  • 更新任务
  • 删除任务

项目设计

        首先,我们设计应用的结构。应用将包含以下组件:

  • 实体类:‘Task‘
  • 数据访问层:‘TaskRepository‘
  • 服务层:‘TaskService‘
  • 控制器层:‘TaskController‘

创建Spring Boot项目

创建Spring Boot项目

        我们可以使用Spring Initializr生成项目框架。选择以下依赖项:

  • Spring Web
  • Spring Data JPA
  • H2 Database

项目结构

        项目结构如下:

src
 └── main
     ├── java
     │   └── com
     │       └── example
     │           └── taskmanager
     │               ├── TaskManagerApplication.java
     │               ├── controller
     │               │   └── TaskController.java
     │               ├── entity
     │               │   └── Task.java
     │               ├── repository
     │               │   └── TaskRepository.java
     │               └── service
     │                   └── TaskService.java
     └── resources
         ├── application.properties

实体类

        ‘Task‘类表示一个任务,包含以下属性和方法:

package com.example.taskmanager.entity;


import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;


@Entity
public class Task {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String description;
    private boolean completed;

    public Task() {
    }

    public Task(String description) {
        this.description = description;
        this.completed = false;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public boolean isCompleted() {
        return completed;
    }

    public void setCompleted(boolean completed) {
        this.completed = completed;
    }
}

数据访问层

        ‘TaskRepository‘接口扩展了‘JpaRepository‘接口,提供对任务数据的CRUD操作:

package com.example.taskmanager.repository;


import com.example.taskmanager.entity.Task;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;


@Repository
public interface TaskRepository extends JpaRepository<Task, Long> {
}

服务层

        ‘TaskService‘类包含业务逻辑和数据访问方法:

package com.example.taskmanager.service;


import com.example.taskmanager.entity.Task;
import com.example.taskmanager.repository.TaskRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;


@Service
public class TaskService {
    private final TaskRepository taskRepository;

    @Autowired
    public TaskService(TaskRepository taskRepository) {
        this.taskRepository = taskRepository;
    }

    public List<Task> getAllTasks() {
        return taskRepository.findAll();
    }

    public Task getTaskById(Long id) {
        return taskRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("Invalid task ID"));
    }

    public Task addTask(Task task) {
        return taskRepository.save(task);
    }

    public Task updateTask(Long id, Task taskDetails) {
        Task task = getTaskById(id);
        task.setDescription(taskDetails.getDescription());
        task.setCompleted(taskDetails.isCompleted());
        return taskRepository.save(task);

    }

    public void deleteTask(Long id) {
        taskRepository.deleteById(id);
    }
}

控制器层

        ‘TaskController‘类处理HTTP请求并返回JSON响应:

package com.example.taskmanager.controller;


import com.example.taskmanager.entity.Task;
import com.example.taskmanager.service.TaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;


@RestController
@RequestMapping("/api/tasks")
public class TaskController {
    private final TaskService taskService;

    @Autowired
    public TaskController(TaskService taskService) {
        this.taskService = taskService;
    }

    @GetMapping
    public List<Task> getAllTasks() {
        return taskService.getAllTasks();
    }

    @GetMapping("/{id}")
    public ResponseEntity<Task> getTaskById(@PathVariable Long id) {
        Task task = taskService.getTaskById(id);
        return ResponseEntity.ok(task);
    }

    @PostMapping
    public Task addTask(@RequestBody Task task) {
        return taskService.addTask(task);
    }

    @PutMapping("/{id}")
    public ResponseEntity<Task> updateTask(@PathVariable Long id, @RequestBody Task taskDetails) {
        Task updatedTask = taskService.updateTask(id, taskDetails);
        return ResponseEntity.ok(updatedTask);
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteTask(@PathVariable Long id) {
        taskService.deleteTask(id);
        return ResponseEntity.noContent().build();
    }
}

配置文件

        在‘src/main/resources‘目录下创建‘application.properties‘文件,配置H2数据库:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true

启动应用

        ‘TaskManagerApplication‘类是Spring Boot应用的入口,包含‘main‘方法:

package com.example.taskmanager;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class TaskManagerApplication {

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

使用Postman测试API

  • 创建任务:POST请求到‘http://localhost:8080/api/tasks‘,请求体如下:
    {
        "description": "Finish Java project"
    }
  • 查看所有任务:GET请求到‘http://localhost:8080/api/tasks‘
  • 查看单个任务:GET请求到‘http://localhost:8080/api/tasks/{id}‘
  • 更新任务:PUT请求到‘http://localhost:8080/api/tasks/{id}‘,请求体如下:
{
    "description": "Finish Java project",
    "completed": true
}
  • 删除任务:DELETE请求到‘http://localhost:8080/api/tasks/{id}‘

总结

        通过本篇博客,我们开发了一个简单的Java RESTful API——任务管理系统。该API展示了如何使用Spring Boot框架创建RESTful服务、处理HTTP请求、与数据库交互以及编写单元测试。通过这个项目,你不仅熟悉了Spring Boot的基本用法,还掌握了如何设计和实现一个实际的Web服务。希望你能通过这个项目进一步提升Java Web开发技能,为将来的复杂项目打下坚实的基础。祝你学习愉快,不断进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白骑士所长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值