JAVA 使用spring boot 搭建WebAPI项目

SpringBoot是一个脚手架,用于快速搭建一个基于Spring的web应用,开箱即用!创建即可开发业务代码。其设计目的是用来简化 Spring 应用的初始搭建以及开发过程

复制代码
1、Controller 层
java 复制代码
package com.example.demo2.controller;

import com.example.demo2.pojo.Dto.UserDto;
import com.example.demo2.pojo.ResponseMessage;
import com.example.demo2.pojo.User;
import com.example.demo2.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@RestController  //接口返回对象 转换成Json文本
@RequestMapping("/user")    //localhost:8088/user/**

public class UserController {

    @Autowired
    IUserService userService;


    @PostMapping("Add")
    public  ResponseMessage Add(@Validated @RequestBody UserDto user){

        User userPojo=userService.Add(user);
        return ResponseMessage.success(userPojo);
     }

    @GetMapping("/{userId}")
     public  ResponseMessage Get(@PathVariable Integer userId){
         User userPojo= userService.GetUser(userId);
         return ResponseMessage.success(userPojo);
    }

    @PutMapping("Eidt")
    public  ResponseMessage Eidt(@Validated @RequestBody UserDto user){

        User userPojo=userService.Eidt(user);
        return ResponseMessage.success(userPojo);
    }

    @DeleteMapping("/{userId}")
    public  ResponseMessage Delete(@PathVariable Integer userId){
        userService.Delete(userId);
        return ResponseMessage.success();
    }
}
复制代码
Service层
java 复制代码
package com.example.demo2.controller;

import com.example.demo2.pojo.Dto.UserDto;
import com.example.demo2.pojo.ResponseMessage;
import com.example.demo2.pojo.User;
import com.example.demo2.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@RestController  //接口返回对象 转换成Json文本
@RequestMapping("/user")    //localhost:8088/user/**

public class UserController {

    @Autowired
    IUserService userService;


    @PostMapping("Add")
    public  ResponseMessage Add(@Validated @RequestBody UserDto user){

        User userPojo=userService.Add(user);
        return ResponseMessage.success(userPojo);
     }

    @GetMapping("/{userId}")
     public  ResponseMessage Get(@PathVariable Integer userId){
         User userPojo= userService.GetUser(userId);
         return ResponseMessage.success(userPojo);
    }

    @PutMapping("Eidt")
    public  ResponseMessage Eidt(@Validated @RequestBody UserDto user){

        User userPojo=userService.Eidt(user);
        return ResponseMessage.success(userPojo);
    }

    @DeleteMapping("/{userId}")
    public  ResponseMessage Delete(@PathVariable Integer userId){
        userService.Delete(userId);
        return ResponseMessage.success();
    }
}
复制代码
IUserService 接口定义
java 复制代码
package com.example.demo2.service;

import com.example.demo2.pojo.Dto.UserDto;
import com.example.demo2.pojo.User;

public interface IUserService {


    User Add(UserDto user);

    User GetUser(Integer userId);

    User Eidt(UserDto user);

    void Delete(Integer userId);
}
复制代码
Repository数据库访问层
java 复制代码
package com.example.demo2.repository;

import com.example.demo2.pojo.User;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository //spring bean
public interface IUserRepository extends CrudRepository<User, Integer> {
}

model层

java 复制代码
package com.example.demo2.Model;

import jakarta.persistence.*;

@Table(name = "tb_user")
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_Id")
    private Integer userId;
    private String userName;
    private String passWord;
    private String email;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "userName='" + userName + '\'' +
                ", userId=" + userId +
                ", passWord='" + passWord + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

Dto 用于model数据转换

java 复制代码
package com.example.demo2.Model.Dto;

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import org.hibernate.validator.constraints.Length;

public class UserDto {
    private Integer userId;
    @NotBlank(message = "用户名不能为空")
    private String userName;

    @NotBlank(message = "密码不能为空")
    @Length(min=6, max=12)
    private String passWord;

    @Email(message ="email格式不正确")
    private String email;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "UserDto{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", passWord='" + passWord + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

定义一个ResponseMessage用于接口统一格式响应

java 复制代码
package com.example.demo2.Model;

import org.springframework.http.HttpStatus;

public class ResponseMessage<T>{
    private int code;
    private String message;
    private T data;

    public ResponseMessage(int code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }


    public  static <T>ResponseMessage<T> success(T data) {

        return new ResponseMessage<T>(HttpStatus.OK.value(), "success", data);
    }

    public  static <T>ResponseMessage<T> success() {

        return new ResponseMessage<T>(HttpStatus.OK.value(), "success", null);
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

}
复制代码
定义一个类GlobalExceptionHanderAdvice用于异常统一处理
java 复制代码
package com.example.demo2.execption;

import com.example.demo2.Model.ResponseMessage;
import jakarta.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice  //统一处理异常
public class GlobalExceptionHanderAdvice {

    Logger log=  LoggerFactory.getLogger(GlobalExceptionHanderAdvice.class);


    @ExceptionHandler({Exception.class})  //什么异常的统一处理
    public ResponseMessage handleException(Exception e, HttpServletRequest request){
        log.error("统一异常",e);
        return new ResponseMessage<>(500,"error",null);

    }
}

配置swagger文档 ,在pom.xml中 添加依赖, 需要注意和你的spring boot 版本

XML 复制代码
       <!-- Springdoc OpenAPI -->
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>3.0.0</version> <!-- 确认与Spring Boot 4.0.2兼容 -->
        </dependency>
复制代码
swagger访问地址 :localhost:8088/swagger-ui/index.html 效果图
相关推荐
带刺的坐椅1 小时前
用 ChatModel 构建 LLM 驱动的 Java 应用
java·ai·llm·solon·rag·chatmodel
杨运交3 小时前
[043][数据模块]基于 Spring Data JPA 的企业级数据访问层设计——实体、审计、状态与服务抽象
spring boot
Flynt3 小时前
Room 3.0 包名重构 + KMP 迁移:我把项目升级踩了个遍
android·数据库·kotlin
用户3721574261353 小时前
Java 将 Word 文档转换为 Markdown:基础转换与导出选项详解
java
行者全栈架构师3 小时前
PolarDB + Spring Boot 实战:从自建MySQL到云原生数据库的零停机迁移
java·后端·架构
这个DBA有点耶19 小时前
NULL不是空——数据库里最反直觉的设计,90%新人踩过的坑
数据库·mysql·代码规范
karry_k19 小时前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
karry_k19 小时前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端
这个DBA有点耶21 小时前
AI写的SQL跑崩了生产库,这锅谁背?
数据库·人工智能·程序员
镜舟科技21 小时前
Databricks 再提 LTAP,AI 时代的数据底座为何重回大一统叙事?
数据库·架构·agent