用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对象。

修改的:

获取单条的:

列表的 :

删除的:

相关推荐
涡能增压发动积2 天前
同样的代码循环 10次正常 循环 100次就抛异常?自定义 Comparator 的 bug 让我丢尽颜面
后端
Wenweno0o2 天前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
swg3213212 天前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
tyung2 天前
一个 main.go 搞定协作白板:你画一笔,全世界都看见
后端·go
gelald2 天前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川2 天前
深入拆解 Java 内存模型:从原子性、可见性到有序性,彻底搞懂 happen-before 规则
java·后端
元宝骑士2 天前
FIND_IN_SET使用指南:场景、优缺点与MySQL优化策略
后端·mysql
用户31952370347712 天前
记一次 PostgreSQL WAL 日志撑爆磁盘的排查
后端
nghxni2 天前
LightESB PlatformHttp v3.0.0:JSONPath 订单转换 HTTP 路由实战
后端
武子康2 天前
大数据-263 实时数仓-Canal 增量订阅与消费原理:MySQL Binlog 数据同步实践
大数据·hadoop·后端