download:Java异常与调优一站式解决方案

项目异常不断,找不到问题所在?百度、Google搜个遍,也找不到答案?本课程针对Java开发中常见的各种异常,从日志、堆栈再深入到JVM,带你发现问题、定位问题、解决问题,最后在实战中搭建开箱即用的SpringBoot脚手架,强化巩固所学,助力你提升开发技能!

技术要求
基本的Java语法
理解Spring的思想和理念

环境参数
JDK 1.8、
SpringBoot 2.1.4.RELEASE

在MongoDB中OjbectId 类型Json序列化反序列化会出错,可以通过以下两种方式解决

1、最简单粗暴的方法,从新定一个一个业务主键比如key,这样的话等于之前的_id不起作用了

2、使用JsonConverter

public class ObjectIdConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(ObjectId);
}

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)    {        if (reader.TokenType != JsonToken.String)        {            throw new Exception(                String.Format("Unexpected token parsing ObjectId. Expected String, got {0}.",                              reader.TokenType));        }        var value = (string)reader.Value;        return String.IsNullOrEmpty(value) ? ObjectId.Empty : new ObjectId(value);    }    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)    {        if (value is ObjectId)        {            var objectId = (ObjectId)value;            writer.WriteValue(objectId != ObjectId.Empty ? objectId.ToString() : String.Empty);        }        else        {            throw new Exception("Expected ObjectId value.");        }    }}

在ObjectId字段上加一行代码即可

[JsonConverter(typeof(ObjectIdConverter))]
public string _id { get; set; }
如果使用Newtonsoft的JsonConvert的话,还需要额外加上参数

JsonConvert.DeserializeObject<xxxx>(json,new ObjectIdConverter());

3、通过Ignore,一种很有技巧性的写法

[JsonIgnore]
public override ObjectId _Id { get; set; }

[BsonIgnore]
public string _IdStr
{
get
{
return Id.ToString();
}
set
{
ObjectId id;
ObjectId.TryParse(value, out id);
Id = id;
}
}

©著作权归作者所有:来自51CTO博客作者mb6050316eb4967的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 一个数据开发人员使用的辅助工具
  2. IBM推出开源工具帮AI抵御对抗性样本***:DNN开发者的福音
  3. BAT程序员们常用的开发神器
  4. python进阶训练营
  5. Python全栈工程师2020升级版【完结】
  6. 六成开发者日编程不足4小时,半数认为学习新语言很困难
  7. 如何构建一个完整的To B应用开发平台
  8. 2021年,开发者的落日
  9. 微软收购GitHub花的75亿美元,到底值不值?

随机推荐

  1. 你还在代码里做读写分离么,试试这个中间件
  2. 微服务架构下的自动化部署,使用Jenkins来
  3. 推荐一个项目管理工具,落地基于Scrum的敏
  4. 2019 我的 Github 开源之路!
  5. 一路走来,感谢有你!2020新年红包奉上!
  6. Spring Cloud Alibaba:Sentinel实现熔断与
  7. 使用Jenkins一键打包部署前端应用,就是这
  8. 大家心心念念的权限管理功能,这次安排上了
  9. Github标星19K+Star,10分钟自建对象存储服
  10. 前后端分离项目,如何优雅实现文件存储!