我想使用com.fasterxml.jackson.databind.ObjectMapper对不可变对象进行序列化和反序列化。

不可变类看起来像这样(只有3个内部属性,getter和constructor):

public final class ImportResultItemImpl implements ImportResultItem {

private final ImportResultItemType resultType;

private final String message;

private final String name;

public ImportResultItemImpl(String name, ImportResultItemType resultType, String message) {

super();

this.resultType = resultType;

this.message = message;

this.name = name;

}

public ImportResultItemImpl(String name, ImportResultItemType resultType) {

super();

this.resultType = resultType;

this.name = name;

this.message = null;

}

@Override

public ImportResultItemType getResultType() {

return this.resultType;

}

@Override

public String getMessage() {

return this.message;

}

@Override

public String getName() {

return this.name;

}

}

但是当我运行这个单元测试时:

@Test

public void testObjectMapper() throws Exception {

ImportResultItemImpl originalItem = new ImportResultItemImpl("Name1", ImportResultItemType.SUCCESS);

String serialized = new ObjectMapper().writeValueAsString((ImportResultItemImpl) originalItem);

System.out.println("serialized: " + serialized);

//this line will throw exception

ImportResultItemImpl deserialized = new ObjectMapper().readValue(serialized, ImportResultItemImpl.class);

}

我得到这个例外:

com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class eu.ibacz.pdkd.core.service.importcommon.ImportResultItemImpl]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)

at [Source: {"resultType":"SUCCESS","message":null,"name":"Name1"}; line: 1, column: 2]

at

... nothing interesting here

这个异常要求我创建一个默认构造函数,但这是一个不可变的对象,所以我不想拥有它。它将如何设置内部属性?这将完全混淆API的用户。

所以我的问题是:我可以以某种方式去/不序列化不变的对象没有默认的构造函数?

java 不允许默认构造_java – 如何使用ObjectMapper去除/序列化不可变对象而不使用默认构造函数?...相关推荐

  1. java 编码实现内存拷贝_java提高篇(六)-----使用序列化实现对象的拷贝

    我们知道在Java中存在这个接口Cloneable,实现该接口的类都会具备被拷贝的能力,同时拷贝是在内存中进行,在性能方面比我们直接通过new生成对象来的快,特别是在大对象的生成上,使得性能的提升非常 ...

  2. java 捕获异常并存入数据库_java异常处理,报异常的话怎么处理对象值,并持久化到数据库中...

    展开全部 //没看到有人回e68a843231313335323631343130323136353331333365646233答你,我还没学到框架,不知道那个是不是可以很便捷操作你说的这样过程 / ...

  3. java 不要科学计数法_java – 设置Jackson ObjectMapper类不要使用科学记数法来表示double...

    我相信这是一个java问题.如果你调试你的程序,你的Double将始终科学地显示,所以我们想要的是强制它成为一个字符串.这可以通过多种方式在Java中实现,您可以在这里查找: 关于你关于杰克逊的具体问 ...

  4. java获取前端json数据_java如何获取前端ajax传来的json对象

    假设使用 jQuery 中的 ajax 1. Json 对象 前端代码示例 $.ajax({ url : 'http://localhost:8888/demo', type: 'post', dat ...

  5. java子类继承父类实际_java子类继承父类,是否生成父类对象?

    从根本上来说,对象就是一个特殊结构的内存以及可以访问这块内存的代码.所以你这个问题其实就是一个到底如何看什么是对象的. 我不了解现在jvm的具体实现,所以只能就理论上进行下分析. 由于现代的编译器都可 ...

  6. java 类锁如何获得_Java Synchronized获得类的锁和获得对象的锁有什么区别呢?

    对象锁&类锁 对象锁 当一个对象中有synchronized method或synchronized block的时候调用此对象的同步方法或进入其同步区域时,就必须先获得对象锁.如果此对象的对 ...

  7. java list map 去重复_Java中List集合去除重复数据的六种方法

    1. 循环list中的所有元素然后删除重复 public static List removeDuplicate(List list) { for ( int i = 0 ; i < list. ...

  8. java创建一个不可变对象_使用不可变对象创建值对象

    java创建一个不可变对象 在回答我最近的文章中AutoValue:生成的不可变的值类 , 布兰登认为,这可能是有趣的,看看如何AutoValue比较项目Lombok和Immutables和凯文借调这 ...

  9. Java™ 教程(不可变对象)

    不可变对象 如果一个对象的状态在构造后不能改变,则该对象被认为是不可变的,对不可变对象的最大依赖被广泛认为是一种创建简单.可靠代码的合理策略. 不可变对象在并发应用程序中特别有用,由于它们不能改变状态 ...

最新文章

  1. Opencv各种滤波实现
  2. CentOS使用sudo提示用户不在sudoers文件中的解决方法
  3. SpringMVC的请求-获得请求参数-获得请求头信息
  4. Linux root用户无法打开Chrome或则chromium(kali)
  5. 自己开发的ABAP代码版本查看工具
  6. 分支语句复习 java 9018
  7. matlab cgf sc 未定义,matlab通用神經網絡代碼
  8. JavaScriptjQuery.带参数的函数
  9. Java 二十五载,正在 Kotlin 化!
  10. SpringCloud学习之Hystrix
  11. 解析卷积神经网络学习笔记——魏秀参
  12. ESAYUI filebox 隐藏
  13. 计算机应用技术专业就业方向分析
  14. 线性方程组(六)- 线性方程组的应用
  15. vite如何兼容低版本浏览器
  16. mysql cpu 高 原因 汇总_MySQL CPU 使用率高的原因和解决方法(来自aliyun官方文档)
  17. Wopus问答第一期
  18. 分布式ssh_使用SSH的分布式管理
  19. 缺失数据填补基础方法(2)——Random Forest (MissForest)填补
  20. mui从iframe页面跳转到应用根目录页面

热门文章

  1. Animation Property Animation 使用
  2. Material Design综合实例
  3. 数据结构之堆栈与队列
  4. Java8 Stream详解~归约(reduce)
  5. Spring Data JPA 从入门到精通~自定义实现Repository
  6. 在Amazon FreeRTOS V10中使用运行时统计信息
  7. python进程监控 supervisor_使用Python的Supervisor进行进程监控以及自动启动
  8. Exception in thread “main“ java.io.FileNotFoundException: C:\Temp (拒绝访问。)
  9. JAVA入门级教学之(if语句)
  10. 小学生 计算机编程 教程,面向小学生的C ++有趣编程(第一卷)配置教学资源课件完整版...