springboot RESTful API接口demo

什么是RESTful接口;

RESTful严格来讲并不是指接口,他是一种接口规范或者说接口风格;网上一位博主的比喻我感觉最为恰当,就是URL+HttpMethod+HttpStatus 就可以知道这个API是干什么的,简单来讲就是见名知义;

  • 采用URI标识资源;例如/user/getUser/1 表示user接口,然后获取ID为1的用户信息;类似于这种的
  • 使用链接关联相关资源
  • 使用统一的标准资源操作接口
    例如:CRUD
public class ResourceService
{
  public IEnumerable<Resource> Get();
  public void Create(Resource resource);
  public void Update(Resource resource);
  public void Delete(String id);
}
  • 使用标准的HTTP方法
    http请求分为:GET\HEAD\OPTIONS\POST\PUT\DELETE;
    其中幂等性方法是:GET\HEAD\OPTIONS 这些请求时获取资源的,没有边界和作用,剩下的几个就是非幂等性的。

springboot RESTful API风格demo

前期的准备工作就不一一赘婿了,大概如:创建springboot工程、引入jar包;创建数据库、创建表;

创建一个基于登陆用户的实体类;

package com.ht.erp.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;

import com.baomidou.mybatisplus.extension.activerecord.Model;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.NotNull;
import java.io.Serializable;

/**
 * <p>
 * 出货单
 * </p>
 *
 * @author Nie.Y.G
 * @since 2021-07-01
 */
@TableName("t_goods_out")
public class GoodsOut extends Model<GoodsOut> {

    private static final long serialVersionUID = 1L;

    /**
     * 主键id
     */
	@TableId(value="id", type= IdType.AUTO)
	private Integer id;
    /**
     * 商品类型
     */
    @TableField("goodsType")
	@NotNull(message = "货物类型不能为空")
	private String goodsType;
    /**
     * 商品名称
     */
    @TableField("goodsName")
	@NotNull
	private String goodsName;
    /**
     * 商品价格
     */
    @NotNull
	private Float price;
    /**
     * 总出货量
     */
	@TableField("totalNumber")
	private Integer totalNumber;
    /**
     * 操作员
     */

	private String operator;
    /**
     * 出货时间
     */
	private Date inTime;
	private String customerName;
	private String customerPhone;
	private String customerAddr;


	public Integer getId() {
		return id;
	}

	public GoodsOut setId(Integer id) {
		this.id = id;
		return this;
	}

	public String getGoodsType() {
		return goodsType;
	}

	public GoodsOut setGoodsType(String goodsType) {
		this.goodsType = goodsType;
		return this;
	}

	public String getGoodsName() {
		return goodsName;
	}

	public GoodsOut setGoodsName(String goodsName) {
		this.goodsName = goodsName;
		return this;
	}

	public Float getPrice() {
		return price;
	}

	public GoodsOut setPrice(Float price) {
		this.price = price;
		return this;
	}

	public Integer getTotalNumber() {
		return totalNumber;
	}

	public GoodsOut setTotalNumber(Integer totalNumber) {
		this.totalNumber = totalNumber;
		return this;
	}

	public String getOperator() {
		return operator;
	}

	public GoodsOut setOperator(String operator) {
		this.operator = operator;
		return this;
	}

	public Date getInTime() {
		return inTime;
	}

	public GoodsOut setInTime(Date inTime) {
		this.inTime = inTime;
		return this;
	}

	public String getCustomerName() {
		return customerName;
	}

	public GoodsOut setCustomerName(String customerName) {
		this.customerName = customerName;
		return this;
	}

	public String getCustomerPhone() {
		return customerPhone;
	}

	public GoodsOut setCustomerPhone(String customerPhone) {
		this.customerPhone = customerPhone;
		return this;
	}

	public String getCustomerAddr() {
		return customerAddr;
	}

	public GoodsOut setCustomerAddr(String customerAddr) {
		this.customerAddr = customerAddr;
		return this;
	}

	@Override
	protected Serializable pkVal() {
		return this.id;
	}

}

以用户的增删改查为例写了几个基于RESTful风格的接口;

 package com.ht.erp.controller;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ht.erp.constant.CommonConstant;
import com.ht.erp.entity.GoodsOut;
import com.ht.erp.handler.Result;
import com.ht.erp.service.impl.GoodsInServiceImpl;
import com.ht.erp.service.impl.GoodsOutServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;

/**
 * <p>
 * 出货单 前端控制器
 * </p>
 *
 * @author Nie.Y.G
 * @since 2021-07-01
 */
@RestController
@RequestMapping("/erp/goodsOut")
public class GoodsOutController {

    /**
     * 分页查询 其他查询参数 参数名
     */
    String GOODS_OUT = "goodsOut";

    @Resource
    GoodsOutServiceImpl goodsOutService;

    @ApiOperation("根据查询条件分页查询出货单")
    @RequestMapping(value = "/page", method = RequestMethod.GET)
    @ResponseStatus(HttpStatus.OK)
    public Result page(@RequestBody Map<String, Object> params) {
        if (Objects.isNull(params.get(CommonConstant.CURRENT))) {
            return Result.error("缺少必要参数");
        }
        int current = NumberUtil.parseInt(params.get(CommonConstant.CURRENT).toString());
        int size = NumberUtil.parseInt(Optional.ofNullable(params.get(CommonConstant.SIZE).toString()).orElse("10"));

        Page page = new Page(current, size);

        QueryWrapper queryWrapper = new QueryWrapper();
        if (Objects.nonNull(params.get(GOODS_OUT))) {
            queryWrapper.setEntity(BeanUtil.fillBeanWithMap((Map) params.get(GOODS_OUT), new GoodsOut(), true));
        }
        Page<GoodsOut> GoodsOuts = goodsOutService.page(page, queryWrapper);

        return Result.ok(GoodsOuts);

    }

    @ApiOperation("增加进货单信息")
    @RequestMapping(value = "add", method = RequestMethod.PUT)
    @ResponseStatus(HttpStatus.OK)
    public Result add(@Validated @RequestBody GoodsOut goodsOut) {
        goodsOutService.save(goodsOut);
        return Result.ok();
    }


    @ApiOperation("根据ID删除")
    @RequestMapping(value = "/removeById/{id}", method = RequestMethod.DELETE)
    @ResponseStatus(HttpStatus.OK)
    public Result removeById(@PathVariable @NotNull(message = "参数不能为空") int id) {
        goodsOutService.removeById(id);
        return Result.ok();
    }


    @ApiOperation("根据ID更新进货单")
    @RequestMapping(value = "/update", method = RequestMethod.POST)
    @ResponseStatus(HttpStatus.OK)
    public Result updateById(@RequestBody GoodsOut goodsOut) {
        if (Objects.isNull(goodsOut.getId())) {
            return Result.error("缺少必要参数");
        }
        goodsOutService.updateById(goodsOut);
        return Result.ok();
    }


    @ApiOperation("根据ID来获取指定的进货单")
    @RequestMapping(value = "/getById/{id}", method = RequestMethod.GET)
    @ResponseStatus(HttpStatus.OK)
    public Result getById(@PathVariable @NotNull(message = "关键参数不能为空") int id) {
        GoodsOut goodsOut = goodsOutService.getById(id);
        return Result.ok(goodsOut);
    }
}

我们用postman测试几个接口试试。

  • 新增用户

在这里插入图片描述

  • 删除用户

在这里插入图片描述
ok, 以上就是基于RESTful风格接口的小demo。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值