2024年该怎么写增删改查

校验总结:
快速失败校验放最外层 节省内存
xml都加条件标签
然后其他的校验都根据业务以及具体情况来
没有业务的时候要有空指针的校验避免空指针问题
校验的细节见 该如何做参数校验 - 稳健国国王 - 博客园 (cnblogs.com)

魔法值问题
建枚举类

入参问题
post请求put请求必须用 @RequestBody 建po
一个参数的话可以用路径传参
get请求必须用 @RequestParam
delete无所谓好像 应该也要符合post那种
入参日志紧跟着入参
log.debug("修改分组名称入参 updateGroupPo:{}", JSONObject.toJSONString(updateGroupPo));

括号里是后面的东西   po要转成json格式

mapper的建立是依据数据库建立的而不是service


数据库实体类和非实体类的区分以及使用场景不明确


查询之后可以直接用vo去接的数据,非得再建一个中间的dto还放在model层去转换 只有数据库出来的数据需要代码处理的话才需要dto

注释:
代码没注释,只有给前端的api注释,后端看不懂
api注释:controller 

tags = "文件分组", description = "{新建,重命名,移动,删除分组,文件分组列表,下拉列表}"

入参注释

@ApiModel(value = "创建分组入参", description = "移动分组入参")
@ApiModelProperty(value = "分组名称")

出参注释

 

返回值问题
统一返回Response
这意味着Service也得是Response返回给controller   查询的话泛型填vo 示例:

Response<List<DocGroupListVo>>

 具体的业务层里也有好多种返回的方式

比如ok了的那就得返回Response.ok() 

    想带着自己的东西就把返回的东西带进去

报错可以直接Response.error
    也可以直接抛

但想返回对应的报错信息

   
异常的是这种

    throw new SmartException(ResInfoEnum.USER_NOT_EXIST.getSeq(), ResInfoEnum.USER_NOT_EXIST.getMsg(), "用户名为空");

公用的枚举不要乱用
d ()这种一般是代码里And加错了或者有些奇怪的数字打进去了  如何避免 1用where条件标签 2第二个开始用And
未认证这种都是 token 认证的服务没过去
坏请求 一般是入参的值 数量 类型有不对的 链路上来说已经走到我的接口了

Create接口可能遇到的问题

1. 数据验证

  • 输入数据格式错误
  • 必填字段缺失
  • 数据长度超出限制
  • 数据类型不匹配
  • 1. JSON 数据格式错误
    • 问题描述:请求体中的 JSON 数据格式不正确,例如缺少逗号、多余的字符等。
    • 示例:
      json
      深色版本
      1{
      2  "name": "John Doe",
      3  "age" 30  // 应该是 "age": 30
      4}
      解决:https://www.bejson.com/ json在线校验工具 在线JSON校验格式化工具(Be JSON)
    2. 必填字段缺失
    • 问题描述:某些字段是必需的,但请求中没有提供这些字段。
    • 示例:
      json
      深色版本
      1{
      2  "age": 30
      3} // 假设 "name" 字段是必需的

      • 解决:最外层做必填校验
       
    3. 数据类型不匹配
    • 问题描述:字段的实际值与预期的数据类型不符,例如期望一个整数却收到了一个字符串。
    • 示例:
      json
      深色版本
      1{
      2  "name": "John Doe",
      3  "age": "thirty" // 应该是数字 30
      4}
      解决: 细心!关注字段数据类型
    4. 数据长度超限
    • 问题描述:字段的长度超过了系统定义的最大长度。
    • 示例:
      json
      深色版本
      1{
      2  "name": "This is a very long name that exceeds the maximum length allowed"
      3} // 假设名字的最大长度为 50
      解决:做
      长度的参数校验 比如数据库长度限制,数据库限制大一点其实也可以
    5. 日期格式错误
    • 问题描述:日期字段的格式与预期不符,例如系统要求的是 yyyy-MM-dd 格式,但收到的是 MM/dd/yyyy 格式。
    • 示例:
      json
      深色版本
      1{
      2  "birthday": "01/01/2000" // 应该是 "2000-01-01"
      3}

      解决:xml  

      TO_CHAR(d.update_time, 'YYYY-MM-DD') AS updateTime, 可以搞定时间要什么类型以及格式
       
    6. 非法字符
    • 问题描述:字段中包含不允许的特殊字符。
    • 示例:
      json
      深色版本
      1{
      2  "username": "john$doe" // 用户名中不应包含 $ 符号
      3}
    7. 数值范围错误
    • 问题描述:数值不在允许的范围内。
    • 示例:
      json
      深色版本
      1{ 2 "score": 101 // 假设分数范围为 0-100 3}

2. 事务管理

  • 创建过程中发生部分失败导致数据不一致 
    @Transactional 解决
  • 跨服务或跨数据库操作的事务协调困难
    项目里的不同服务 可以使用郭斌教的事务方案解决
    调文件中心AI的 出来之后判断一下 抛异常+注解解决

3. 并发控制

  • 在高并发场景下,同一资源可能被同时创建导致冲突
  • 乐观锁或悲观锁的选择与实现 

4. 安全性

  • SQL 注入攻击
  • 敏感数据泄露
    security.crypto.password
    register
  • 身份验证与授权不足
    token验证 
    JwtTokenEnhancer 
    enhance

    Spring Security的@PreAuthorize  控制权限

5. 性能问题

  • 大量数据写入导致性能瓶颈
  • 缓存与数据库同步延迟

6. 日志记录

  • 创建操作的日志记录不完整或丢失
  • 错误日志级别设置不当

7. 接口设计

  • 接口响应时间过长
  • 返回状态码不规范

8. 数据库约束

  • 主键冲突
  • 外键约束违反

9. 业务逻辑错误

  • 逻辑判断失误导致异常数据产生
  • 异常处理不当

10. 测试覆盖

  • 单元测试缺失或不足
  • 集成测试场景未充分考虑

11. 系统集成

  • 与其他系统交互时的数据一致性问题
  • 第三方服务故障影响创建流程

12. 文档维护

  • API 文档更新滞后
  • 文档描述与实际实现不符

13. 版本控制

  • 接口变更导致的向后兼容性问题
  • 版本回滚策略不明确

14. 配置管理

  • 环境配置差异导致的行为不同
  • 配置文件泄露敏感信息

15. 资源限制

  • 内存溢出
  • 文件系统空间不足

这些问题在实际开发中需要逐一排查并解决,以确保 create 类型接口的健壮性和可靠性





posted @ 2024-09-12 17:59  稳健国国王  阅读(52)  评论(0)    收藏  举报