• 前后数据传输协议规范


    在进行增删改操作时,我们通常会返回true或false来表示是否查询成功

    在进行查询单条数据时,我们通常返回一个json串对应当前查询数据

    在进行查询全部数据时,我们通常返回一个json数组

    这样就出现了一个问题:返回的数据种类太多没有一个统一的格式,前端无法清楚的获取当前返回数据的类种类。

    为了解决这种现象,我们可以自己规定一个统一的返回格式

    data:存放数据层返回的数据

    code:告知前端调用了何种方法

    msg:告知用户查询结果 

    controller层里新建一个Result类,用来规定统一返回格式

    在新建一个Code类,规定各种请求方法的状态码

    1. package com.brrbaii.controller;
    2. public class Code {
    3. //请求成功
    4. public static final Integer SAVE_OK = 20011;
    5. public static final Integer DELETE_OK = 20021;
    6. public static final Integer UPDATE_OK = 20031;
    7. public static final Integer SELECT_OK = 20041;
    8. //请求失败
    9. public static final Integer SAVE_ERR = 20010;
    10. public static final Integer DELETE_ERR = 20020;
    11. public static final Integer UPDATE_ERR = 20030;
    12. public static final Integer SELECT_ERR = 20040;
    13. }

    我们在controller里将所有的方法的返回类型都修改为Result类

    将数据层的返回结果作为data参数

    判断请求类型的操作状态码获取code

    将code和data两个数据作为构造器参数构造Result对象,并将该对象返回成一个我们定义的规范的统一的Json格式

     附上完整代码

    Controller层:

    1. package com.brrbaii.controller;
    2. import com.brrbaii.pojo.Brand;
    3. import com.brrbaii.service.BrandService;
    4. import org.springframework.beans.factory.annotation.Autowired;
    5. import org.springframework.web.bind.annotation.*;
    6. import java.awt.print.Book;
    7. import java.util.List;
    8. @RestController
    9. @RequestMapping("/brands")
    10. public class BrandController {
    11. @Autowired
    12. private BrandService brandService;
    13. @GetMapping
    14. public Result getAll(){
    15. List brands = brandService.selectAll();
    16. Integer code = checkMesg(brands) ? Code.SELECT_OK : Code.SELECT_ERR;
    17. return new Result(code,brands);
    18. }
    19. @GetMapping("/{Id}")
    20. public Result getById(@PathVariable Integer Id){
    21. Brand brand = brandService.selectById(Id);
    22. Integer code = checkMesg(brand) ? Code.SELECT_OK : Code.SELECT_ERR;
    23. String msg = checkMesg(brand) ? "查询成功": "查询失败";
    24. return new Result(code,brand,msg);
    25. }
    26. @PostMapping
    27. public Result save(@RequestBody Brand brand){
    28. boolean flag = brandService.save(brand);
    29. Integer code = flag ? Code.SAVE_OK : Code.SAVE_ERR;
    30. return new Result(code,flag);
    31. }
    32. @DeleteMapping("/{Id}")
    33. public Result delete(@PathVariable Integer Id){
    34. boolean flag = brandService.delete(Id);
    35. Integer code = flag ? Code.DELETE_OK : Code.DELETE_ERR;
    36. return new Result(code,flag);
    37. }
    38. @PutMapping()
    39. public Result update(@RequestBody Brand brand){
    40. boolean flag = brandService.updateById(brand);
    41. Integer code = flag ? Code.UPDATE_OK : Code.UPDATE_ERR;
    42. return new Result(code,flag);
    43. }
    44. public boolean checkMesg(Object o){
    45. return o != null ? true : false;
    46. }
    47. }

    Service接口:

    1. package com.brrbaii.service;
    2. import com.brrbaii.pojo.Brand;
    3. import java.util.List;
    4. public interface BrandService {
    5. List selectAll();
    6. Brand selectById(Integer Id);
    7. boolean save(Brand brand);
    8. boolean delete(Integer Id);
    9. boolean updateById(Brand brand);
    10. }

    Service实现类

    1. package com.brrbaii.service.Imp;
    2. import com.brrbaii.dao.BrandDao;
    3. import com.brrbaii.pojo.Brand;
    4. import com.brrbaii.service.BrandService;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.stereotype.Service;
    7. import java.util.List;
    8. @Service
    9. public class BrandServiceImp implements BrandService {
    10. @Autowired
    11. private BrandDao brandDao;
    12. @Override
    13. public List selectAll() {
    14. List brands = brandDao.selectAll();
    15. return brands;
    16. }
    17. @Override
    18. public Brand selectById(Integer Id) {
    19. Brand brand = brandDao.selectById(Id);
    20. return brand;
    21. }
    22. @Override
    23. public boolean save(Brand brand){
    24. return brandDao.save(brand);
    25. }
    26. @Override
    27. public boolean delete(Integer Id) {
    28. return brandDao.deleteById(Id);
    29. }
    30. @Override
    31. public boolean updateById(Brand brand) {
    32. return brandDao.updateById(brand);
    33. }
    34. }

     Dao层:

    1. package com.brrbaii.dao;
    2. import com.brrbaii.pojo.Brand;
    3. import org.apache.ibatis.annotations.Delete;
    4. import org.apache.ibatis.annotations.Insert;
    5. import org.apache.ibatis.annotations.ResultMap;
    6. import org.apache.ibatis.annotations.Select;
    7. import org.springframework.stereotype.Repository;
    8. import java.util.List;
    9. @Repository
    10. public interface BrandDao {
    11. @Select("select * from tb_brand")
    12. @ResultMap("BrandResult")
    13. List selectAll();
    14. @Select("select * from tb_brand where id = #{Id}")
    15. @ResultMap("BrandResult")
    16. Brand selectById(Integer Id);
    17. @Delete("delete from tb_brand where id = #{Id}")
    18. boolean deleteById(Integer Id);
    19. boolean save(Brand brand);
    20. boolean updateById(Brand brand);
    21. }

    BrandDao.xml(用来写复杂的sql语句):

    1. "1.0" encoding="UTF-8" ?>
    2. mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.brrbaii.dao.BrandDao">
    6. <resultMap id="BrandResult" type="brand">
    7. <result column="brand_name" property="brandName" />
    8. <result column="company_name" property="companyName" />
    9. resultMap>
    10. <insert id="save">
    11. insert into
    12. tb_brand
    13. values
    14. (null, #{brandName}, #{companyName}, #{ordered}, #{description}, #{status})
    15. insert>
    16. <update id="updateById">
    17. update tb_brand
    18. <set>
    19. <if test="brandName!=null and brandName!= ''">
    20. brand_name = #{brandName},
    21. if>
    22. <if test="companyName!=null and companyName!= ''">
    23. company_name = #{companyName},
    24. if>
    25. <if test="description!=null and description!= ''">
    26. description = #{description},
    27. if>
    28. <if test="ordered!=null and ordered!= ''">
    29. ordered = #{ordered},
    30. if>
    31. <if test="status!=null and status!= ''">
    32. status = #{status},
    33. if>
    34. set>
    35. where id = #{id}
    36. update>
    37. mapper>

    POJO实体类:

    1. @Data
    2. @NoArgsConstructor
    3. @Getter
    4. @Setter
    5. @ToString
    6. public class Brand {
    7. private int id;
    8. private String brandName;
    9. private String companyName;
    10. private int ordered;
    11. private String description;
    12. private int status;
    13. }

     

    项目目录图:


  • 相关阅读:
    JavaSE阶段常见面试题(二)
    【华为OD机试真题 python】 连续字母长度【2022 Q4 | 100分】
    代码随想录算法训练营第八天|二叉树(截止到左叶子之和)
    vsomeip环境搭建及helloworld测试例跑通
    信息收集-DNS
    快速解决“找不到msvcr120.dll无法执行代码”问题,总结5解决方法
    Linux-进程管理
    工作卷?一行更比一行卷
    如何使用lerna进行多包(package)管理
    GoWeb——Gin框架入门(第一章)
  • 原文地址:https://blog.csdn.net/weixin_48841931/article/details/126683644