• P39 数据塑形




    只返回需要的字段。字段指的是dto上面的字段。你不是entity上的字段。

    写代码

    这里的返回类型实际上是 IEnumerable<T>类型的。这样就会把ComapnyDto上面的字段都返回回去。想要做数据塑性,就不能返回具体的类型。因为具体的类型字段都是死的。我们应该返回什么呢 ExpandObject类型的 ExpandObject里面的属性是动态的。

    扩展方法

    还是使用一个扩展方法。




    判断非空,new一个List的ExpandObject

    如果大小固定的话,可以把大小也写上。

    那么怎么通过字段名返回响应的属性值呢?这个时候就肯定需要用到反射。而反射呢,比较消耗资源。

    首先争对这个类型,把它所有的属性都提取出来。然后重复利用这个结果就可以了。 而不必循环的时候针对每个实例再走一遍这个反射操作。
     
    如果传入的fields为空,就表示返回所有的属性

    那么getProperties获取什么类型的属性呢?首先是public的,另外还是实例的instance


    然后就是加上这些属性

    单独处理

    属性都是逗号分隔开的
    通过反射取出propertyInfo。用typeof().GetProperty首先参数是属性的名称,然后是 忽略大小写。

    然后必须是public的,然后必须是实例上面的





    有了数据之后就循环数据

    ExpandObject实际上就是一个Dictionary。下面这样就可以把属性名和属性值添加到ExpandObject里面了。

    添加到list里面,然后返回这个list

    controller里面处理

    首先加一个字段属性

    这是我们目前的返回类型。

    这里换成IActionResult

    最后用shapeData

    然后还需要考虑到分页

    测试

    先只取一个id

    加上companyName

    获取单个资源的情况-数据塑形












    分开两个扩展方法是处于性能的考虑

    测试



    没有的属性

    这是客户端引起的错误,应该由返回4开头的错误。

    再封装一个service


    想要导出复用它就把它封装成一个接口,注入到DI容器。




    startUp注册

    构造函数注入


    判断字段是否存在

    获取单个资源的action

    测试不存在的字段。

    其他功能




    包含子资源的把子资源也一块取出来


    只取子资源的id

    这个字段companyName包含 dave这个字符串的。


    可以参考的微软的OData,它是完全实现restful风格架构的基础以上又添加了很多高级的功能,包裹高级的查询,数据塑性等等。

    以上讲的是完全自己手动实现的数据塑性。如果项目想使用一个现成的完全使用restful架构风格的api,就可以使用微软的OData相关的一些框架。
     

    结束

  • 相关阅读:
    IK分词器插件
    倒排索引
    logstash-安装、基本使用、入门
    Anaconda使用-详解
    java之反射
    Java中级路线jdbc第一天
    Java字符串及字符串的常用方法知识点总结
    Java基本类型的类包装知识点总结
    Java Class类知识点总结
    java异常类知识点总结
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/14132645.html
Copyright © 2020-2023  润新知