• P32 局部更新 PATCH











    json patch支持的操作,一共有6种
    add:就是向资源里面添加值,或者是向数组里面添加一个元素。

    开始写代码


    JsonPatchDocument需要我们安装一个库





    从employee映射到UpdateDto

    比如说patchDocument如果有一个只读的操作,它add的一个属性,这个属性在C#类里面并不存在,这时候就会报错,或者是它要修改一个只读的属性。这些都会报错。所以说我们需要处理一下这块。





    一个替换的操作replace。然后替换的字段是employeeNo。替换后的值是1111122222

    422错误

    这是因为asp.net core 3.0开始他是用的json库,是比较新的json库。新的库实现一些比较核心的功能。很多功能还没有实现。

    下面我们就是用json.net库要替换。



    再次发送请求204

    查询结果EmployeeNo确实被更改了。但是出现了一个问题。查询结果变成xml的格式了

    headers加上接收的类型。

    但是没写Accept的headers为什么默认返回的是xml格式的呢?
    因为默认用的是core自带的json库,但是后来我们加了json.net替换了 它,所以默认优先返回的就是xml格式了。
    这我们把json.net的添加 到addXml的前面

    这样不加accept返回的也是xml格式了。

    把名字改成


    再查询确实被更新了。

    remove操作会把datetime类型设置成默认值

    Add+copy



    处理验证错误

    我们先把employeeNo字段的值移除了。 

    返回的是500错误。也就是在Controller的model 绑定环节并没有走。

    为什么没走因为这个类型是JsonPatchDocument而不是我们的UpdateDto类型。

    所以在下面,我们就需要进行手动验证
    若果验证失败就返回false,并且错误信息会放在ModelState里面。


    ValidationProblem方法就实现了 ValidateProbleDetails的标准





    jsonPatchDocument里面也可能出错。比如说我们想删除一个不存在的字段

    随便传一个字段

    返回500是不对的,因为是客户端引起的错误 ,应该是4开头的。

    如果patchDocument里面有任何的验证错误,就会把ModelState的属性变成false,并且错误信息也会放在里面。




    也把jsonPatch里面的错误指出了

    处理为什么返回的是400,而不是422错误。

    ValidationProblem里面返回的错误信息是手动返回的,

    之前我们自定义了problemDetails的错误格式。

    但是我们这里的ValidationProblem方法并没有采用startup里面配置的ProblemDetails的配置。所以它返回的是400 bad request 而不是422


    而这块在model绑定的时候,那个验证才使用了下面的配置。

    修改返回的格式

    重写下ValidationProblem



    我们最后要返回的是采用startup的配置



    再次发送请求

    局部更新或新增


    先new 一个UpdateDto然后还是把patchDocument里面的值 放到dto里面,把modelState传过去做验证。


    最后要返回的是employeeDto

    测试




    把id故意改成9999



    返回的header里面

    复制headers看看能不能获取这个值

    结束

  • 相关阅读:
    HEOI2016 题解
    数据结构考前复习【已弃】
    BZOJ 3993: [SDOI2015]星际战争 [二分答案 二分图]
    BZOJ 4698: Sdoi2008 Sandy的卡片 [后缀自动机]
    BZOJ 3990: [SDOI2015]排序 [搜索]
    字符串考前总结
    BZOJ 3881: [Coci2015]Divljak [AC自动机 树链的并]
    CF698C. LRU [容斥原理 概率]
    BZOJ 2707: [SDOI2012]走迷宫 [高斯消元 scc缩点]
    BZOJ 1444: [Jsoi2009]有趣的游戏 [AC自动机 高斯消元]
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/12589953.html
Copyright © 2020-2023  润新知