MongoDB的ObjectId的序列化问题
来源:互联网 发布:java九阴真经 编辑:程序博客网 时间:2024/05/17 06:45
MongoDB在不特殊指认的情况下,默认的集合主键是“_id”,类型是ObjectId。ObjectId是一个12字节的BSON类型字符串,包含了UNIX时间戳,机器识别码,进程号,计数值信息。机器码用来防止分布式系统生成id时冲突的问题,保证每台机器生成的识别码不同,进程号保证多线程情况下生成的id不同。
ObjectId在java程序中是对象类型,JavaBean中常这样使用:
public class BaseVo { @Id private ObjectId id; private Integer status; private Long inDate; private Long reDate; // getter setter略}
此时,如果直接实体类序列化为json,id将被作为对象处理,前段无法将此对象转为字符串,也无法将此id作为唯一标识调用其他数据。
{id: { "time": 1494233455000, "timestamp": 1494233455, "date": 1494233455000, "new": false, "timeSecond": 1494233455, "inc": -125534200, "machine": -1248386109 }}
故有时需要将ObjectId的序列化做处理,将ObjectId直接序列化为字符串。
以springmvc为例,在接口返回数据前统一处理序列化问题。自定义类实现ResponseBodyAdvice接口,重写beforeBodyWrite方法,自定义序列化方法。
@ControllerAdvicepublic class myResponseBodyAdvice implements ResponseBodyAdvice<Object> { @Override public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) { // TODO Auto-generated method stub return true; } @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { SerializeConfig config = new SerializeConfig(); config.put(ObjectId.class, new ObjectIdJsonSerializer()); return JSONObject.parseObject(JSON.toJSONString(body, config)); }}
public class ObjectIdJsonSerializer implements ObjectSerializer { @Override public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType) throws IOException { SerializeWriter out = serializer.getWriter(); if (object == null) { serializer.getWriter().writeNull(); return; } out.write("\"" + ((ObjectId) object).toString() + "\""); }}
这样处理后接口返回的id将变成字符串类型。
原创团队
【总监】十二春秋之,3483099@qq.com;
【Master】zelo,616701261@qq.com;【运营】狼行天下,897221533@qq.com;
【产品设计】流浪猫,364994559@qq.com;【体验设计】兜兜,2435632247@qq.com;
【iOS】淘码小工,492395860@qq.com;iMcG33K,imcg33k@gmail.com;
【Android】人猿居士,1059604515@qq.com;思路的顿悟,1217022114@qq.com;
【Java】首席工程师MR_W,feixue300@qq.com;【测试】土镜问道,847071279@qq.com;
【数据】喜乐多,42151960@qq.com;【安全】保密,你懂的。
- MongoDB的ObjectId的序列化问题
- Gson处理mongoDB的ObjectId的问题
- MongoDB ObjectId的优化
- 【Mongodb】使用Python对Mongodb中ObjectId的操作
- 讲讲Mongodb的24位ObjectId的无损压缩
- MongoDB中ObjectId的误区,以及引起的一系列问题
- mongoDB 获取最后插入的文档的ObjectID/_id方法
- MongoDB在插入后,如何获取对应的ObjectId
- mongodb通过子串查询ObjectId对应的record
- MongoDB小技巧-用ObjectID查询某一时间范围内的数据
- java mongoDB 获取并使用_id(ObjectId)的值
- mongodb ObjectId
- mvc使用mongodb时objectId序列化与反序列化
- mongodb c# 序列化时 , Id引起的问题
- MongoDB:18-MongoDB-ObjectId
- MongoDB深究之ObjectId
- MongoDB深究之ObjectId
- MongoDB深究之ObjectId
- javaweb项目,java代码生成的验证码,到服务器上显示不出来的问题!
- banner图失真解决方案
- Idea破解,输入注册码时报 this license BIG3CLIK6F has been cancelled 错误的解决。
- 欢迎使用CSDN-markdown编辑器
- typeof判断数据类型
- MongoDB的ObjectId的序列化问题
- UVA
- shell脚本的学习2-运算符
- 计算机网络-概述
- DPDK 简介
- FAST-RCNN 和 Faster-RCNN
- VS2013+MFC串口控件的简单上位机
- Oracle PL/SQL开发基础(第三十五弹:异常的传递)
- 快速简单理解——希尔排序