spring-data-mongo 将json转成了实体,实体又被responsebody转成了json?
前后台分离开发,使用的mongodb数据,在开发过程中,让我感觉很不可思议的事情就是。
spring-data-mongo 将 mongodb的查询数据转换成了 实体类,实体类又被 responsebody转换成了
JSON字符串,这真是够折腾的。
直接把Mongodb的结果发送给前台不好嘛?
为什么非要进行着两次不必要的转换?
有木有人跟我相同想法?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
1,不想面向对象的话,可以面向数据
2,spring data rest 你需要了解下
3,你的这些没有业务的纯粹数据交换,spring boot 不一定适合,有更小巧、简介的替代品例如,nodejs、php
4,你思考过你的怀疑方向么?
在数据表达上面,MongoDB虽然使用的是JSON,但是由于JSON的一些先天不足(如类型欠缺),数据库没有办法在底层使用它,所以MongoDB中存储的实际是BSON,这是一种有利于存储和传输但是人不可读的二进制格式,从MongoDB得到的结果实际上是BSON。无论是BSON还是JSON,都不是Java原生支持的类型,所以它们在Java中都有对应的封装类。BSON对应的是BsonDocument,JSON类型并没有在驱动程序中体现,因为驱动给出的是
Document
类型,这个稍后再讲。从整体流程上看,驱动在发出请求之后得到的是一个BSON文档,可以理解为一堆二进制数据,这是没法直接用的,所以通过反序列化变成
BsonDocument
,这个类型就有一些有意思的API了,比如toJson
。理论上从这里就可以直接变成JSON返回回去了,但是实际使用中,我们只有很少的情况是需要JSON字符串作为结果的,更多的情况下,我们是需要把文档中的值取出来用。为了这个目的,所有的查询方法返回的都是Document
,它相当于一个字典或者哈希表,通常这就是我们使用的基础类型,同样它也是支持toJson
方法的。下面才说到Spring Data,它比驱动位于更上层,实际上是调用驱动然后在这个基础上实现了更多上层功能,比如映射成POJO就是其中之一,剩下的诸如各种CRUD方法。如前面所说,站在前端的角度可能JSON对你是最有用的,大部分时候我们需要的并不是把一个对象变成JSON,而是要根据业务逻辑方便地查询和修改其中的值。这也是Spring Data的意义所在。
如果你的唯一目的就是变成JSON,那么根本就用不上Spring Data,直接用驱动就好了,确实效率是更好的,并且驱动其实本身更接近Mongo一些,Spring Data为了在不同数据库之间形成共同的语义,做了一些自己的封装,有时候并不是十分容易理解。
说了这么多,不知道有没有加深你对Mongo驱动和Spring Data在定位上的理解,希望有所帮助。