用SpringMvc,实现,增删改查,api接口

spring mvc实现 增删改查 的api接口。

先创建控制类:

control包文件夹里面创建名为UserController

java 复制代码
// UserController.java
package com.example.demo.controller;

public class UserController {
}

要用restful注解去修饰

java 复制代码
// UserController.java
package com.example.demo.controller;

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

@RestController
public class UserController {
}

用requestMapping定义当前类的访问路径

java 复制代码
// UserController.java
package com.example.demo.controller;

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

@RestController
@RequestMapping("/user")
public class UserController {
}

给前端返回同样类型的对象,便于前端判断和处理数据。 那么这个对象对应的类就叫做统一返回结果类。

先在项目中创建common包(就是在com.example.demo创建common文件夹),

再来,在common文件夹下面创建result类

java 复制代码
// Result.java
package com.example.demo.common;

public class Result {

}

类里面的内容,粘贴代码如下:

java 复制代码
import java.io.Seializable;

/**
 * 返回统一结果类
 */
@Data
public class Result implements Serializable {
  private static final long serialVersionUID = 1L;
  // 状态码
  private int code;
  // 提示信息message
  private String msg;
  // 返回的属性类型
  private Object data;
  
  /**
   * 直接返回成功结果
   * @param data
   * @return
   */
  public static Result success(Object data) {
    return success(code: 200, msg: '操作成功', data);
  }
  
  /**
   * 自定义返回成功结果
   * @param code
   * @param msg
   * @param data
   * @return
   */
  public static Result success(int code, String msg, Object data) {
    Result r = new Result();
    r.setCode(code);
    r.setMsg(msg);
    r.setData(data);
    return r;
  }
  
  /**
   * 直接返回失败信息
   * @return
   */
  public static Result error() {
    return error(code: 400, msg: "操作失败", data: null);
  }
  
  /**
   * 带参数返回失败信息
   * @param msg
   * @return
   */
  public static Result error(String msg) {
    return error(code: 400, msg, data: null);
  }
  
  /**
   * 自定义返回失败信息
   * @param code
   * @param msg
   * @param data
   * @return
   */
  public static Result error(int code, String msg, Object data) {
    Result r = new Result();
    r.setCode(code);
    r.setMsg(msg);
    r.setData(data);
    return r;
  }
}

可以使用这些静态方法去进行创建对象。比如success方法,把data数据也就是要返回的数据放到success的参数,就会创建带有结果的result对象返回前端,这个codemessage都是固定的。第二个就是把这三个值都交给用户去自定义,然后创建result对象返回,第三个的话就是没有返回结果,直接返回一个result对象,这个比较适合不需要向前端传值的时候。

error方法也差不多,只是成功的时候返回的这个状态码默认是200,失败的时候返回的状态码默认是400,方便交给前端进行判断。

我们就可以写API接口方法了。

打开UserController

java 复制代码
// UserController.java
package com.example.demo.controller;

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

@RestController
@RequestMapping("/user")
public class UserController {
}

userService对象注入进来,用@outwhite注解或者@source注解都可以,

java 复制代码
// UserController.java
package com.example.demo.controller;

import com.example.demo.common.Result;
import com.example.demo.entity.USer;
import com.example.demo.service.UserService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {
  @Resource
  private UserService userService;
  
  /**
   * 新增用户
   * @param user
   * @return
   */
  @PostMapping
  public Result save(@RequestBody User user) {
    userService.save(user);
    return Result.success();
  }
}

通过@Resource注入进去不需要通过new的方式去创建对象了。

使用@PostMapping注解进行标识。返回的类型都使用Result,以后常见的方法都会统一使用这个Result进行返回。post使用的数据它床底的是这个请求体。需要在这个request body注解进行标识。要保存的话,就用userService.save()方法进行保存就可以了。只要userService.save(user)这行代码没出错,就说明保存成功了。

新增和修改就不需要给前端传什么结果了。直接传一个没有结果的result对象给前端就可以了。直接返回Result的这个success方法。(它创建了一个没有结果的result对象)。

接着写修改的方法:

java 复制代码
// UserController.java
package com.example.demo.controller;

import com.example.demo.common.Result;
import com.example.demo.entity.USer;
import com.example.demo.service.UserService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {
  @Resource
  private UserService userService;
  
  /**
   * 新增用户
   * @param user
   * @return
   */
  @PostMapping
  public Result save(@RequestBody User user) {
    userService.save(user);
    return Result.success();
  }
  
  /**
   * 修改用户
   * @param user
   * @return
   */
  @PutMapping
  public Result update(@RequestBody User user) {
    userService.udpateById(user);
    return Result.success();
  }
}

修改和新增的方法差不多,只是userService的api调用的方法不一样。

接着就是查询单条记录的:

java 复制代码
// UserController.java
package com.example.demo.controller;

import com.example.demo.common.Result;
import com.example.demo.entity.USer;
import com.example.demo.service.UserService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {
  @Resource
  private UserService userService;
  
  /**
   * 新增用户
   * @param user
   * @return
   */
  @PostMapping
  public Result save(@RequestBody User user) {
    userService.save(user);
    return Result.success();
  }
  
  /**
   * 修改用户
   * @param user
   * @return
   */
  @PutMapping
  public Result update(@RequestBody User user) {
    userService.udpateById(user);
    return Result.success();
  }
  
  /**
   * 查询单条记录
   * @param id
   * @return
   */
  @GetMapping("/{id}")
  public Result getOne(@PathVariable Long id) {
    return Result.success(userService.getById(id));
  }
  
  /**
   * 查询所有记录
   * @return
   */
  @GetMapping()
  public Result getList() {
    return Result.success(userService.list());
  }
  
  /**
   * 删除单条记录
   * @param id
   * @return
   */
  @DeleteMapping("/{id}")
  public Result delete(@PathVariable Long id) {
    return Result.success(userService.deleteById(id));
  }
}

baomidou.com/guides/data...

在这个网址去查所有的增删改查调用api,

重启项目,去测试一下。

在表里手动删掉一条,然后用Apifox去测试,

建调试的请求。

新增和修改,需要传入json格式的字符串,

js 复制代码
{
  "code": 200,
  "msg": "操作成功",
  "data": null
}

这个就是返回了一个Result对象。

修改的:

获取单条的:

列表的 :

删除的:

相关推荐
毅炼29 分钟前
Java 基础常见问题总结(4)
java·后端
想用offer打牌1 小时前
MCP (Model Context Protocol) 技术理解 - 第一篇
后端·aigc·mcp
千寻girling1 小时前
Koa.js 教程 | 一份不可多得的 Node.js 的 Web 框架 Koa.js 教程
前端·后端·面试
程序员清风1 小时前
北京回长沙了,简单谈谈感受!
java·后端·面试
何中应1 小时前
请求头设置没有生效
java·后端
NPE~1 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化
宋小黑2 小时前
JDK 6到25 全版本网盘合集 (Windows + Mac + Linux)
java·后端
念何架构之路2 小时前
Go进阶之panic
开发语言·后端·golang
先跑起来再说2 小时前
Git 入门到实战:一篇搞懂安装、命令、远程仓库与 IDEA 集成
ide·git·后端·elasticsearch·golang·intellij-idea
码农阿豪3 小时前
Flask应用上下文问题解析与解决方案:从错误日志到完美修复
后端·python·flask