我宁愿建议使用

constructor creators保持模型对象不可变.也就是说,所有JSON值都传递给构造函数,该构造函数将初始化其他计算属性.

无论如何,如果你想在反序列化后自定义一个对象(不为每个类型编写一个反序列化器),你可以通过最终调用新构造实例的特殊方法的方式来实现modify the deserializer.这是一个适用于实现特殊接口的所有类的示例(可以考虑使用注释来标记post构造方法).

public class JacksonPostConstruct {

public static interface PostConstructor {

void postConstruct();

}

public static class Bean implements PostConstructor {

private final String field;

@JsonCreator

public Bean(@JsonProperty("field") String field) {

this.field = field;

}

public void postConstruct() {

System.out.println("Post construct: " + toString());

}

@Override

public String toString() {

return "Bean{" +

"field='" + field + '\'' +

'}';

}

}

private static class PostConstructDeserializer extends DelegatingDeserializer {

private final JsonDeserializer> deserializer;

public PostConstructDeserializer(JsonDeserializer> deserializer) {

super(deserializer);

this.deserializer = deserializer;

}

@Override

protected JsonDeserializer> newDelegatingInstance(JsonDeserializer> newDelegatee) {

return deserializer;

}

@Override

public Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {

Object result = _delegatee.deserialize(jp, ctxt);

if (result instanceof PostConstructor) {

((PostConstructor) result).postConstruct();

}

return result;

}

}

public static void main(String[] args) throws IOException {

ObjectMapper mapper = new ObjectMapper();

SimpleModule module = new SimpleModule();

module.setDeserializerModifier(new BeanDeserializerModifier() {

@Override

public JsonDeserializer> modifyDeserializer(DeserializationConfig config,

BeanDescription beanDesc,

final JsonDeserializer> deserializer) {

return new PostConstructDeserializer(deserializer);

}

});

mapper.registerModule(module);

String json = "{\"field\":\"value\"}";

System.out.println(mapper.readValue(json, Bean.class));

}

}

输出:

Post construct: Bean{field='value'}

Bean{field='value'}

java jackson 自定义_java – 自定义jackson解组行为相关推荐

  1. java jaxb 集合_java-使用JAXB解组/编组List String

    java-使用JAXB解组/编组List 我正在尝试创建一个非常简单的REST服务器. 我只是有一个测试方法,它将返回字符串列表. 这是代码: 它给出以下错误: SEVERE: A message b ...

  2. java 获取泛型_Java泛型 | Jackson TypeReference获取泛型类型信息

    前言 Jackson是一个比较流行的Json序列化和反序列化框架.本文以Jackson为例介绍TypeReference实现涉及泛型的反序列化,及TypeReference的实现原理.对于获取泛型类型 ...

  3. java条码大小_java – 自定义条形码输入中缺少条形码高度

    我正在整合FedEx运输API以使用 Java生成标签.一切都很好,但除了这个问题.在为FedEx Freight设置LabelFormatType到COMMON2D或LABEL_DATA_ONLY时 ...

  4. java spring包_java 自定义加载器,加载spring包,动态加载实现,jar包隔离,tomcat加载webapp方式...

    java 自定义加载器,加载spring包,动态加载实现,jar包隔离,tomcat加载webapp方式 发布时间:2018-08-20 12:02, 浏览次数:774 , 标签: java spri ...

  5. java错误页面_java自定义错误页面实现方法

    java后台自定义错误页面:(推荐:java视频教程) java后台项目中,经常会出现404或500等错误, 如果不做设置,服务器会默认返回404或500的错误页面 给前端显示错误页面. 掌握了错误页 ...

  6. java interceptor用法_java自定义拦截器用法实例

    本文实例讲述了java自定义拦截器及其用法.分享给大家供大家参考.具体如下: LoginInterceptor.java文件如下: package com.tq365.util; import jav ...

  7. java jslider 自定义_Java自定义JSlider UI

    JSlider作为Swing中提供的滑标组件, 以图形方式在有界区间内通过移动滑块来选择值,滑块可以显示主刻度标记和次刻度标记.大量应用于如播放器中的音量设定等领域中.但是JSlider本身提供的UI ...

  8. java url 协议_Java自定义URL协议

    Java提供了对URL协议进行扩展的能力,通过扩展用户可以自定义URL通信协议,JDK默认提供了对HTTP,FTP,JAR,FILE等的实现,而当需要自己定义通信协议的时候,就需要利用JDK提供的对U ...

  9. java报文封装_Java自定义协议报文封装 添加Crc32校验的实例

    刚做完的demo,直接进入主题了,开启两个线程,模拟Socket服务端和客户端通信,将数据封装为指定格式报文发送 代码: import java.io.IOException; import java ...

  10. java 注解作用_java 自定义的注解有什么作用

    展开全部 自定义注解,可以应用到反射中,比如自己32313133353236313431303231363533e59b9ee7ad9431333335333764写个小框架. 如实现实体类某些属性不 ...

最新文章

  1. c 获取mysql列数据_转 用C API 操作MySQL数据库
  2. 重磅!我国建成首个自动驾驶封闭高速公路测试环境
  3. Geany整体增加减少缩进快捷键
  4. 一个数据仓库时代开始--Hive
  5. C#中的Lock锁深入理解
  6. 通俗理解T检验与F检验的区别【转】
  7. python如何创建一个列表_在python中创建列表的最佳和/或最快方法
  8. Python 只读属性的实现
  9. 三星Galaxy Fold中国区发布会临时取消:推迟时间未定 彻查屏幕问题
  10. 英特尔推出业界领先的AI与数据分析平台,全新处理器、内存、存储、FPGA解决方案集体亮相
  11. Java学习笔记--反射API
  12. EasyUI 1.4.4 DataGrid(大数据量) bufferview滚动时不加载下一页数据解决方案
  13. 用python创建一个从1到10的列表_【Python 1-8】Python手把手教程之——管理列表List...
  14. c语言小程序 祝你生日快乐!
  15. Windows Server 2016 安装IIS
  16. 数据可视化—随机漫步
  17. RMQ---csu1809
  18. 设计师都在用的宝藏网站,你一定要知道
  19. mysql查看备份文件_MySQL的备份与还原以及常用数据库查看命令
  20. Dota2电竞数据API接口 - 【战队基本信息】API调用代码

热门文章

  1. 5.Jenkins 权威指南 --- 安全
  2. 4. HTTP Status Code
  3. 18. JavaScript event 对象
  4. h5带mysql数据库的留言板_【mysql】用PHP写留言板,有回复功能,要写入数据库。...
  5. Vue传递方法给页面调用
  6. vue-cli webpack浅析
  7. Self Host WebApi服务传输层SSL加密(服务器端+客户端调用)
  8. 【转】和菜鸟一起学linux之DBUS基础学习记录
  9. Ubuntu安装Atom编辑器
  10. 面试:C++实现访问者模式