P21 创建 Company 资源 POST

现在一共有两个实体

争对CompanyController创建Action

CompanyDto现在主要是用来做输出的,我们的post是做输入,输入参数和输出参数通常是不一样的。当然也偶尔有时候是一模一样的

添加CompanyAddDto信用做新增的实体。不同作用的dto还是都要单独建立的,以为随着业务需求的变化,它后续有可能还是不一样的。分成多个类dto比较有利于重构。查询、创建、更新这三类分别是三个不同的dto

这里的[FromBody]可写可不写。

争对低版本的.net core的版本,如果传进来的对象是空的 就抛出400错误。

博主记得最早的.net core版本里面好像是没有[ApiController]这个Attribute的,

在那个时候或者是你没有使用[ApiController]这个Attribtue的是时候,就需要检查下请求里面body里面的参数,是否正确的转化成了我们的CompanyAddDto这个类。
当请求的body里面什么都没有的时候,或者是里面的参数不正确的时候,那么我们的这个company参数就会变成null

现在我们就不需要手动的去检查传递的companyAddDto对象是否为空对象,因为我们的Controller使用了[ApiController]这个Attribute。
如果遇到了刚才说的那种情况传递说来的对象为空,那么框架会自动返回400 BadRequest

所以这里我们可以把这段代码去掉了。框架会自动的帮我们判断,并返回400BadRequest

Mapper映射

传递过来的对象,我们首先要转换为Company

AutoMapper的映射

在这句话执行之后呢,实际上这个entity并没有添加到数据库里面。

我们F12进来看具体的代码。最后一行代码,这个实体目前只是被添加到了DbContext里面。

想要保存到数据库内就要调用DbContext的SaveChangesAsync方法。我们在Repisitory里面已经封装了这个方法。

这里我们再调用一个saveAsync方法就可以了。这个Repository对象我们可以把他看做是一个黑盒,controller不需要知道里面的实现细节。
这个黑盒也可以说对于Controller来说他就是一个接口。所以我不知道他的实现细节,到底有没有包含记录日志 啊,或者是有没有处理异常 啊。
具体的实现细节对Controller来说都是未知的。
假如说controller在插入数据库的时候除了问题,抛出了异常,那么其实我也不用处理。因为抛出异常后,框架会保证返回500错误。所以这里我们就不处理异常了。

保存成功后,使用CreatedAtRoute()方法,


把dto改个名字,叫做returnDto

运行测试


最好再指定下Accept。就是返回接收的格式

注意是post请求。

加上判断,Employee不为空才去执行下面的操作。刚开始创建一个公司是没有员工。


请求的body设置。

相应的地址最后有个Location。通过这个地址我们可以获取到这个新创建的资源。


再次执行这个post请求。新生成的公司 id不一样了。说明这个资源又被创建了一个。

我们再执行以下get,获取所有的公司

测试空的body


返回的是400错误。这代表的是客户端引起的错误。

故意把name改成布尔类型的为false

发送请求,依然返回的是400 错误。这都因为我们的Controller使用了ApiController这个Attribute

结束

原文地址:https://www.cnblogs.com/wangjunwei/p/12546169.html

时间: 2024-10-10 03:52:57

P21 创建 Company 资源 POST的相关文章

cocosstudiio 创建的资源目录安排

目的 本来想写一篇长一点的博客的,想了想太装了,直接说自己的关注重点就行了. 重点 在使用cocosstudio的时候创建游戏项目以后,会有一个使用ui编辑器的编辑器的资源的问题.但是当使用ui文件的时候,他们的资源是不能共享的.我的做法是: 1.创建好游戏项目以后,只是创建场景资源. 2.在其他目录创建ui项目,将ui资源导入到场景资源里面.这样就没了相对和绝对目录的问题. 3.大体的目录结构是 resource ui image file.csb file.json image file.p

飞康应用——虚拟磁盘和创建SAN资源

点击"重新扫描" 选择"发现新设备",点击"确定" 在"重新扫描状态"对话框中选择"物理设备",可以看到已经重新添加了一块网卡,点击"关闭",如有需要,也可点击"保存报告" 物理适配器是指IPStor上已有的适配器,用于挂接.管理具体的物理设备 物理设备是指为IPStor提供存储空间的存储设备 在"物理资源"下"物理设备"中的&

Spring源码学习-容器BeanFactory(一) BeanDefinition的创建-解析资源文件

写在前面 从大四实习至今已一年有余,作为一个程序员,一直没有用心去记录自己工作中遇到的问题,甚是惭愧,打算从今日起开始养成写博客的习惯.作为一名java开发人员,Spring是永远绕不过的话题,它的设计精巧,代码优美,值得每一名开发人员学习阅读. 在我最开始学习javaEE时,第一次接触Spring是从一个S(Struts)S(Spring)H(Herbinate)的框架开始.由java原生开发到框架开发转换过程中,那时我的印象里Struts负责控制层,herbinate负责数据层,而Sprin

P23 同时创建父子资源 & 创建资源集合

modle类里面的名称和 AddDto内的名称最好是保持一致.这样我们AutoMapper里面就不需要再做特殊的配置了. 添加员工的逻辑在这里面 添加测试 3条Employee信息 在这里加一个断点进行测试 company里面的参数,有三个employee entity里面也是3个employee 返回的结果 复制Location的Header 在后面加上employees就可以得到这个公司下的员工了. 同时创建多个资源 来看个请求,这个请求是添加一个company 如果想post一组compa

python的multiprocessing模块进程创建、资源回收-Process,Pool

python的multiprocessing有两种创建进程的方式,每种创建方式和进程资源的回收都不太相同,下面分别针对Process,Pool及系统自带的fork三种进程分析. 1.方式一:fork() 举例: 1 import os 2 pid = os.fork() # 创建一个子进程 3 os.wait() # 等待子进程结束释放资源 4 pid为0的代表子进程. 缺点:1.兼容性差,只能在类linux系统下使用,windows系统不可使用:2.扩展性差,当需要多条进程的时候,进程管理变得

DBCP--""连接池创建"与"资源关闭"Util类

1 package cn.itsource._03_dbcp; 2 3 import java.io.InputStream; 4 import java.sql.Connection; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 import java.util.Properties; 9 10 import javax.sql.DataSource; 1

Android基于mAppWidget实现手绘地图(五)--如何创建地图资源

地图资源可以通过Slicing Tool工具生成,教程如下: 1.打开Eclipse标准版4.3.2,以Java项目形式导入”slicingtool“项目,运行.(必须是eclipse4.3.2及以上版本,不然会少包而报错) 2.此时会新启一个eclipse,在新的里面widow-->show view-->mAppWidget-->Map Slicing Tool,打开窗口: 选择被切块格数大小(一般建议256格) 如果你想使用地图的GPS特点,填写校正数据 Export后,会得到一个

c++ 网络编程(四)TCP/IP LINUX/windows下 socket 基于I/O复用的服务器端代码 解决多进程服务端创建进程资源浪费问题

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9613861.html 好了,继上一篇说到多进程服务端也是有缺点的,每创建一个进程就代表大量的运算与内存空间占用,相互进程数据交换也很麻烦. 本章的I/O模型就是可以解决这个问题的其中一种模型...废话不多说进入主题-- I/O复用技术主要就是select函数的使用. 一.I/O复用预备知识--select()函数用法与作用 select()用来确定一个或多个套接字的状态(更为本质一点来讲是文

Android资源文件之创建与访问

资料来源于官方api文档 Android资源文件之创建与访问 Android适配之创建别名资源 如果你想将某一资源用于多种设备配置(但是不想作为默认资源提供), 则无需将同一资源放入多个备用资源目录中.相反,可以(在某些情况下)创建备用资源,充当保存在默认资源目录下的资源的别名. 注: 并非所有资源都会提供相应的机制让你创建指向其他资源的别名.特别是, xml/目录中的动画资源.菜单资源.原始资源以及其他未指定的资源均不提供此功能. 例如,加入你有有一个应用图片icon.jpg, 并且需要不同区