目录

一、创建Spring Boot项目

​编辑​编辑二、 定义模型

四、创建服务层接口和实现类

1. 服务层接口:

2. 服务层实现类:

  五、创建控制器(Controller)

 六、异常处理

 七、测试你的API

八、运行你的应用


在Spring Boot中编写具有RESTful风格的后端接口通常遵循以下步骤:

一、创建Spring Boot项目

  使用Spring Initializr或你的IDE(如IntelliJ IDEA)来创建一个新的Spring Boot项目。选择你需要的依赖,如Spring WebSpring Data JPASpring Boot DevTools等。

二、 定义模型

  创建一个POJO类来表示你的数据模型。例如,如果你正在创建一个用户管理接口,你可能会有一个User类。

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;
    // getters and setters
}

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;
    // getters and setters
}

三、创建仓库接口(Repository)

  如果你使用Spring Data JPA,你可以创建一个继承自JpaRepository的接口来操作数据库。

public interface UserRepository extends JpaRepository<User, Long> {

public interface UserRepository extends JpaRepository<User, Long> {
}

四、创建服务层接口和实现类

  创建一个服务类,它将包含业务逻辑,并调用仓库接口来执行数据库操作。
1. 服务层接口:

package com.lzpu.demo1023.service;

import com.lzpu.demo1023.pijo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;


public interface UserService {
    User saveUser(User user);
    User findUserById(Long id);
    List<User> findAllUsers();
    void deleteUser(Long id);
}
 

 

package com.lzpu.demo1023.service;

import com.lzpu.demo1023.pijo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;


public interface UserService {
    User saveUser(User user);
    User findUserById(Long id);
    List<User> findAllUsers();
    void deleteUser(Long id);
}

2. 服务层实现类:

package com.lzpu.demo1023.controller;

import com.lzpu.demo1023.pijo.User;
import com.lzpu.demo1023.service.UserService;
import com.lzpu.demo1023.service.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserController implements UserService{
    private final UserRepository userRepository;

    @Autowired
    public UserController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    
    @Override
    public User saveUser(User user) {
        return userRepository.save(user);
    }

    @Override
    public User findUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    @Override
    public List<User> findAllUsers() {
        return userRepository.findAll();
    }

    @Override
    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}
 

 

package com.lzpu.demo1023.controller;

import com.lzpu.demo1023.pijo.User;
import com.lzpu.demo1023.service.UserService;
import com.lzpu.demo1023.service.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserController implements UserService{
    private final UserRepository userRepository;

    @Autowired
    public UserController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    
    @Override
    public User saveUser(User user) {
        return userRepository.save(user);
    }

    @Override
    public User findUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    @Override
    public List<User> findAllUsers() {
        return userRepository.findAll();
    }

    @Override
    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}

  五、创建控制器(Controller)

创建一个控制器类,并使用@RestController注解标注它。在这个类中,你将定义RESTful API端点。 

package com.lzpu.demo1023.controller;

import com.lzpu.demo1023.pijo.User;
import com.lzpu.demo1023.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {
    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping
    public List<User> listUsers() {
        return userService.findAllUsers();
    }

    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        User user = userService.findUserById(id);
        if (user!= null) {
            return ResponseEntity.ok(user);
        } else {
            return ResponseEntity.notFound().build();
        }
    }

    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        User savedUser = userService.saveUser(user);
        return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);
    }

    @PutMapping("/{id}")
    public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {
        User existingUser = userService.findUserById(id);
        if (existingUser!= null) {
            existingUser.setName(user.getName());
            existingUser.setEmail(user.getEmail());
            User updatedUser = userService.saveUser(existingUser);
            return ResponseEntity.ok(updatedUser);
        } else {
            return ResponseEntity.notFound().build();
        }
    }

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

 

package com.lzpu.demo1023.controller;

import com.lzpu.demo1023.pijo.User;
import com.lzpu.demo1023.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {
    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping
    public List<User> listUsers() {
        return userService.findAllUsers();
    }

    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        User user = userService.findUserById(id);
        if (user!= null) {
            return ResponseEntity.ok(user);
        } else {
            return ResponseEntity.notFound().build();
        }
    }

    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        User savedUser = userService.saveUser(user);
        return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);
    }

    @PutMapping("/{id}")
    public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {
        User existingUser = userService.findUserById(id);
        if (existingUser!= null) {
            existingUser.setName(user.getName());
            existingUser.setEmail(user.getEmail());
            User updatedUser = userService.saveUser(existingUser);
            return ResponseEntity.ok(updatedUser);
        } else {
            return ResponseEntity.notFound().build();
        }
    }

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

 

 六、异常处理

 你可以使用@ControllerAdvice来全局处理异常。

package com.lzpu.demo1023.controlleradvice;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(value = Exception.class)
    public ResponseEntity<Object> handleException(Exception e) {
        // 异常处理逻辑
        return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}
 

 

package com.lzpu.demo1023.controlleradvice;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(value = Exception.class)
    public ResponseEntity<Object> handleException(Exception e) {
        // 异常处理逻辑
        return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

 七、测试你的API

 使用Postman、Curl或任何其他API测试工具来测试你的接口。

八、运行你的应用

 运行你的Spring Boot应用,并通过浏览器或API测试工具访问你的API端点。

以上步骤展示了如何创建一个简单的RESTful API。在实际开发中,你可能还需要考虑安全性、认证授权、输入验证、日志记录、API文档(如使用Swagger)等方面。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐