【实际开发08】- Controller 层处理入参 , 可避免进去 impl 层

news2024/11/26 3:56:32

目录

1. 增 / 删 / 改 - 记录日志 , 查询不记录日志

2. 第一批次 : 参数校验 ( id、id1 == id2 、?)

3. 增 / 改 dto 判空 , 实体类层 ( entity ) 进行处理

4. 通用修改 的 impl 层可供 ( status、普通 ) 使用

5. 入参优先级 : Json > Map > Javabean

1. Javabean 的优 / 缺点

2. map 的优 / 缺点

3. Json 的优 / 缺点

6. list/{xxxId} 以 path 方式传参导致的异常 ( 传 null ) - 不推荐

7. 需要进行 feign 调用的 API , 注意参数传递的问题

1. 对象传参 ~ Controller / Feign 层都需要添加 注解 @Requestbody

2. @PathVariable 更加强调参数绑定问题 , Controller / Feign 层都要

8. 返回值

1. xxxEntityVO / R

2. Map

3. Object

4. JSONObject

5. JSONArray

6. List

7. List


1、入参判空处理

2、条件判断


1. 增 / 删 / 改 - 记录日志 , 查询不记录日志


2. 第一批次 : 参数校验 ( id、id1 == id2 、?)


3. 增 / 改 dto 判空 , 实体类层 ( entity ) 进行处理


4. 通用修改 的 impl 层可供 ( status、普通 ) 使用

分组校验入参即可

1、Controller方法 new 建

2、Impl 方法共用

 


5. 入参优先级 : Json > Map > Javabean

Contorller 层参数传递建议不要使用 HashMap , 推荐使用数据模型定义

分析:

Json 万能

Map 适合对接外部项目

entityDTO 适合自营产品

权衡利弊 , 如果团队开发还是 javabean 比较好 , 个人项目就无所谓了。追求高效开发 , 可以使用 Map


1. Javabean 的优 / 缺点

1、面向对象的良好诠释、

2、数据结构清晰 , 便于团队开发 & 后期维护。

3、代码足够健壮 , 可以排除掉编译期错误。

// -------------------------------------缺点----------------------------------
    
1、代码量增多 , 大量时间去封装用到的表对象。

2、可能会影响开发效率


2. map 的优 / 缺点

Map 一时爽 , 维护爽歪歪 ( 过去就是一 Jio )

优点:

1、灵活性强于javabean , 易扩展 , 耦合度低。
    	(可以随意扩展 , 后期变动灵活 , 想往里面塞几个参数就塞几个参数;而且也省去了各种对象定义和命名的烦恼)

2、写起来简单 , 代码量少。

3、mybatis 查询的返回结果本身就是MAP , 可能会比返回javabean快
    
    
// 如果非要用Map传参 , 也麻请配备完备的测试用例 , 后来接手维护的人天天看着代码怀疑人生

缺点:

1、javabean在数据输入编译期就会对一些数据类型进行校验 , 如果出错会直接提示。
		而map的数据类型则需要到sql层 , 才会进行处理判断。
		(优秀的注解没法使用:@NotNull , @NotBlank)

2、map的参数名称如果写错 , 也是需要到sql层 , 才能判断出是不是字段写错 , 不利于调试等。相对而言javabean会在编译期间发现错误

3、map的参数值如果多传、乱传 , 也是需要到sql层 , 才能判断出是不是字段写错 , 不利于调试等。相对而言javabean会在编译期间发现错误

4、仅仅看方法签名 , 你不清楚Map中所拥有的参数个数、类型、每个参数代表的含义。 后期人员去维护 , 例如需要加一个参数等 , 如果项目层次较多 , 就需要把每一层的代码都了解清楚才能知道传递了哪些参数。
    
5、好用的API工具与你无缘(例如:Swagger无法使用)

 


3. Json 的优 / 缺点


6. list/{xxxId} 以 path 方式传参导致的异常 ( 传 null ) - 不推荐

 


7. 需要进行 feign 调用的 API , 注意参数传递的问题


1. 对象传参 ~ Controller / Feign 层都需要添加 注解 @Requestbody

  • @RequestBody 接收 json 参数 , Feign 层是必须 加的

  • POST 请求,Controller 不加 @RequestBody 注解时,API 也是可以直接调用的,但参数传递的形式 是 application/x-www-form-urlencoded 表单形式 ;


2. @PathVariable 更加强调参数绑定问题 , Controller / Feign 层都要


8. 返回值


1. xxxEntityVO / R

    R resultR = JSONObject.parseObject(s, R.class);
    if (resultR.getCode() == 1) {
        return R.error(110001, "调用接口异常,请联系管理员" + resultR.getMsg());
    }

    // 数据过滤(仅仅取与当前 tenantId 相关的数据)- 22.09.27
    /*String s1 = r.getData().toString();
                    String resultFilter = dataFilterPlus(s1, applicationManage.getTenantId());
                    JSONArray jsonArray = JSON.parseArray(resultFilter);
                    return R.ok(jsonArray);*/
    // JSONObject jsonObject = JSONObject.parseObject(s1);
    return resultR;


2. Map


3. Object


4. JSONObject


5. JSONArray

 


6. List<xxxEntityVO>


7. List<Map>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/167881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

终于有人将Session和cookie讲明白了!一节课彻底搞懂

1 引出session cookie session与cookie属于一种会话控制技术。常用在身份识别&#xff0c;登录验证&#xff0c;数据传输等。举个例子&#xff0c;就像我们去超市买东西结账的时候&#xff0c;我们要拿出我们的会员卡才会获取优惠。这时候&#xff0c;我们怎么识别这个会员卡真…

软考那些事儿,看这一篇就够了!

软考7个常见问题解答一、报考条件凡遵守中华人民共和国宪法和各项法律&#xff0c;恪守职业道德&#xff0c;具有一定计算机技术应用能力的人员&#xff0c;均可根据本人情况&#xff0c;报名参加相应专业类别、级别的考试。因此&#xff0c;计算机软件资格考试报名条件不设学历…

ITIL 问题管理综合指南

什么是ITIL问题管理 问题是多个事件的原因或潜在原因。影响许多用户的重大事件或重复发生的事件可能会出现问题。此外&#xff0c;可以在基础设施诊断系统中识别问题之前 用户会受到影响。 事件会阻碍业务生产力&#xff0c;提供快速解决方案有助于确保业务运营的无缝连续性。…

第四章SpringFramework之Ioc

文章目录IoC思想认识什么叫依赖/耦合控制反转和依赖注入的理解IoC&#xff1a;Inversion of Control&#xff0c;控制反转。DI&#xff1a;Dependency Injection&#xff0c;翻译过来是依赖注入。为什么需要这样齿轮的例子来突出Ioc的重要IOC容器在Spring中的实现Spring 提供了…

剑指 Offer 36. 二叉搜索树与双向链表

剑指 Offer 36. 二叉搜索树与双向链表 难度中等619 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点&#xff0c;只能调整树中节点指针的指向。 为了让您更好地理解问题&#xff0c;以下面的二叉搜索树为例&#xff1a…

【翻车现场】初读《编程之美》就想秀一下,结果还翻车了

文章目录 一、前言 二、我的思路 三、Code 四、翻车现场 五、后续问题 一、前言 ———如何写一个短小的程序&#xff0c;让 Windows 的任务管理器显示CPU的占用率为50%? 这道有趣的面试题我是这两天从《编程之美》电子版中看到的&#xff0c;看意思就是邹老师在微软对一…

LabVIEW写入可快速加载的TDMS文件

LabVIEW写入可快速加载的TDMS文件TDMS文件格式的设计目的是在尽可能快地读写数据的同时仍保持足够的灵活性来适应采集过程中通道数量和采样率的变化。 但是数据读写速度快的文件未必可快速加载。 TDMS文件是一个完全的二进制文件&#xff0c;由多个部分数据段组成&#xff0c;在…

多线程~实现一个自己的线程池,以及基于单例模式的线程池

目录 1.线程池的概念 2.线程池的实现 3.基于单例模式的线程池 &#xff08;1&#xff09;.单例模式的概念 &#xff08;2&#xff09;.基于单例模式的线程池 1.线程池的概念 池化技术本质上都是为了提高效率。线程池也是同理&#xff0c;提前准备好一些线程&#xff0c;用…

Lesson 1. 线性回归模型的一般实现形式

文章目录一、线性回归模型建模准备1. 数据准备2. 模型准备二、线性回归模型训练1. 模型训练的本质&#xff1a;有方向的参数调整1.1 模型训练与模型参数调整1.2 模型评估指标与损失函数1.3 损失函数与参数求解2. 利用最优化方法求解损失函数2.1 损失函数的求解2.2 图形展示损失…

【DevOps实战|基于Jenkins与Gitlab构建企业级持续集成环境系统】(更新中未完成)

目录 一、DevOps简介 二、CI/CD简介 1、代码部署的最基本流程 2、软件开发生命周期 3、持续集成整体流程 三、Git简介 1、GitHub与Gitlab区别 四、基于Jenkins与Gitlab构建持续集成环境系统 1、环境说明 2、安装gitlab 1&#xff09;配置邮件报警 一、DevOps简介 De…

目标检测的新范式:Towards Open World Object Detection

论文题目&#xff1a;Towards Open World Object Detection 1 摘要 人类有一种识别其环境中未知物体实例的自然本能(natural instinct)。当这些未知的实例最终获得相应的知识时&#xff0c;对它们的内在好奇心有助于了解它们。这促使我们提出一种新的计算机视觉问题称为&…

Week 11

洛谷P1796 汤姆斯的天堂梦 题目描述 汤姆斯生活在一个等级为 000 的星球上。那里的环境极其恶劣&#xff0c;每天 121212 小时的工作和成堆的垃圾让人忍无可忍。他向往着等级为 NNN 的星球上天堂般的生活。 有一些航班将人从低等级的星球送上高一级的星球&#xff0c;有时需…

算法第十四期——动态规划(DP)初入门

目录 DP初步:状态转移与递推 最少硬币问题 DP基础 DP的两个特征 DP:记忆化 图解DP求解过程 最经典的DP问题&#xff1a;0/1背包 模板题&#xff1a;小明的背包 DP状态设计 DP状态转移方程&#xff08;重点&#xff09; 代码 空间优化:滚动数组 (1&#xff09;交替滚…

【机组组合】基于Benders分解算法解决混合整数规划问题——机组组合问题(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【鸟哥杂谈】腾讯云 CentOS8 Linux环境下通过docker安装mysql

忘记过去&#xff0c;超越自己 ❤️ 博客主页 单片机菜鸟哥&#xff0c;一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-01-15 ❤️❤️ 本篇更新记录 2023-01-15 ❤️&#x1f389; 欢迎关注 &#x1f50e;点赞 &#x1f44d;收藏 ⭐️留言&#x1f4dd;&#x1f64…

Vite中如何更好的使用TS

TS 是JS的一个类型检查工具&#xff0c;检查我们代码中可能会存在的一些隐形问题&#xff1b;同时可以使我们的编译器具备一些语法提示功能。 如果我们使用create-vue&#xff08;vue3官方脚手架工具&#xff09;创建了项目&#xff0c;该项目基于 Vite 且 TypeScript 已经准备…

SpringBoot+Vue使用easypol出现无法导出Excel表的问题

本篇博文目录1.异常信息2.原因3.解决办法4.详细的SpringBooteasypol前后端分离实现excel导出的步骤1.异常信息 今天在使用easypol导出Excel表的时候,发现能够从后端接口返回数据&#xff0c;但是就是无法导出Excel,控制台输出devicepolicies:1 Uncaught (in promise) error,并且…

2022年度总结 - 明月醉窗台

2022年度总结 - 明月醉窗台 1.2022年成果 - 感谢CSDN提供了自我创作的平台&#xff0c;有多少个夜晚我将其作为心灵的寄托... - 感谢各位小伙伴的抬爱和学习过程中的共同见证&#xff0c;将人生视为一条向上的曲线是明确且坚持不懈的抉择... - 立足当下&#xff0c;不忘脚踏实…

【算法基础】1.5 前缀和与差分

文章目录前缀和题目描述解法讲解二维前缀和题目描述解法讲解差分题目描述解法讲解二维差分题目描述解法讲解前缀和 题目描述 输入一个长度为 n 的整数序列。 接下来再输入 m 个询问&#xff0c;每个询问输入一对 l,r。 对于每个询问&#xff0c;输出原序列中从第 l 个数到第 …

IVD-Net:多模态UNet在MRI中的椎间盘定位和分割

摘要 本文提出了一种多模态磁共振图像中的椎间盘&#xff08;IVD&#xff09;定位和分割体系结构&#xff0c;它扩展了UNet。与单一的图像相比&#xff0c;多模态的数据带来了互补的信息有助于更好的数据表示和判别能力。 在本文中&#xff0c;每种MRI模态的数据都以不同的路…