jackson java网络接口_java~jackson实现接口的反序列化
jackson是springboot中集成的序列化方式,是默认的json序列化方式,当然你可以使用其它的序列化工具代替它,不过今天我们还是说一下它,使用jackson进行序列化一个类,然后再把它的JSON字符反序列化为它的接口对象。
现实
这种方式默认是不行的,因为接口不能被自动实例化
使用redisTelmplete时,如果使用objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);这种试序列化,由于会把实例类型写到时 JSON里,所以也不能反序列化为接口
几个序列化方式
一 序列化为具体类型,无法反序列化接口,即你用什么类型序列化的,就用什么类型反序列化,它经常与redis的序列化Jackson2JsonRedisSerializer一起使用。
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
User user = new User();
user.setUsername("lind");
user.setEmail("zzl@sina.com");
String msg = om.writeValueAsString(user);
结果
["com.lind.common.JacksonTest$User",{"username":"lind","email":"zzl@sina.com","authorities":null}]
二 序列化为字符串,主要好处是与类型无关,只要字段可以配置上,就可以反序列化,并且在自定义序列化器定义之后,还可以对接口类型进行反序列化,可以说更加方便。
定义一个序列化器
public static class DefaultResourceUserSerializer extends JsonDeserializer {
@Override
public DefaultResourceUser deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
throws IOException {
ObjectCodec oc = jsonParser.getCodec();
JsonNode node = oc.readTree(jsonParser);
DefaultResourceUser userAccountAuthentication = new DefaultResourceUser() {
@Override
public String getUsername() {
return node.get("username").asText();
}
@Override
public String getEmail() {
return node.get("email").asText();
}
@Override
public Collection extends GrantedAuthority> getAuthorities() {
List simpleGrantedAuthorities = new ArrayList<>();
Iterator elements = node.get("authorities").elements();
while (elements.hasNext()) {
JsonNode next = elements.next();
JsonNode authority = next.get("authority");
simpleGrantedAuthorities.add(new SimpleGrantedAuthority(authority.asText()));
}
return simpleGrantedAuthorities;
}
};
return userAccountAuthentication;
}
在接口上使用它
``
@JsonDeserialize(using = DefaultResourceUserSerializer.class)
public interface DefaultResourceUser {
String getUsername();
String getEmail();
Collection extends GrantedAuthority> getAuthorities();
}
代码展现了反序列化一个json字符串
json
{
"id": "347214418355949568",
"username": "admin",
"password": "{bcrypt}$2a$10$tVrm4VjC9BXF8PStUASZkOJCOm7mKR4ZVDHau.Ug/tm6ZEXEsHhcC",
"nickName": "测试",
"mobile": "",
"email": "",
"address": "北京",
"street": "",
"sex": 0,
"passStrength": "",
"avatar": "",
"type": 0,
"status": 0,
"description": "",
"departmentId": "",
"departmentTitle": null,
"resourcePermissions": [{
"id": "348193374957735936",
"title": "系统管理",
"path": "",
"type": 0,
"parentId": "",
"parent": null,
"sons": null
}, {
"id": "348193687223668737",
"title": "用户管理",
"path": "/user",
"type": 0,
"parentId": "348193374957735936",
"parent": null,
"sons": null
}, {
"id": "348193868908335105",
"title": "添加用户",
"path": "/user/add",
"type": 0,
"parentId": "348193687223668737",
"parent": null,
"sons": null
}, {
"id": "348193927590842369",
"title": "用户列表",
"path": "/user/list",
"type": 0,
"parentId": "348193687223668737",
"parent": null,
"sons": null
}, {
"id": "348194428344602626",
"title": "权限管理",
"path": "/permission/**",
"type": 0,
"parentId": "348193374957735936",
"parent": null,
"sons": null
}, {
"id": "348194428344602627",
"title": "权限添加",
"path": "/permission/add*",
"type": 0,
"parentId": "348194428344602626",
"parent": null,
"sons": null
}, {
"id": "348194428344602628",
"title": "角色管理",
"path": "/role/list",
"type": 0,
"parentId": "348193374957735936",
"parent": null,
"sons": null
}, {
"id": "348194428344602629",
"title": "demo",
"path": "/demo",
"type": 0,
"parentId": "348193374957735936",
"parent": null,
"sons": null
}],
"resourceRoles": null,
"enabled": true,
"authorities": [{
"authority": "用户管理"
}, {
"authority": "添加用户"
}, {
"authority": "用户列表"
}, {
"authority": "权限管理"
}, {
"authority": "权限添加"
}, {
"authority": "角色管理"
}, {
"authority": "demo"
}],
"accountNonLocked": true,
"accountNonExpired": true,
"credentialsNonExpired": true
}
代码
@SneakyThrows
@Test
public void stringJackson() {
DefaultResourceUser user = fromJson("jack.json", DefaultResourceUser.class);
log.info("user:{}", user.getUsername());
for (GrantedAuthority grantedAuthority : user.getAuthorities()) {
log.info("auth:{}", grantedAuthority.getAuthority());
}
}
结果
[1](https://img2020.cnblogs.com/blog/118538/202012/118538-20201209203450087-419672723.png)
jackson java网络接口_java~jackson实现接口的反序列化相关推荐
- mysql接口java代码_java改成接口类
类图 1.如果开发java项目最好设置如下:----->Tools ----->Option---->Notation---->Default中的值改成Java 2.将模型转换 ...
- predicate java 作用_Java函数式编程接口详解之Predicate
一.初识 Predicate是Java提供的重要的函数编程接口之一,作用主要是用于逻辑判断. 首先看看源码: @FunctionalInterface public interface Predica ...
- java网络接口_java网络编程之识别示例 获取主机网络接口列表
importjava.net.*; importjava.util.Enumeration; publicclassInetAddressExample{ publicstaticvoidmain(S ...
- java 火车票_Java 面向对象 之 接口 火车票实例
/** 接口的实际应用: 题目: 两个人A,B开发一个火车票显示功能A负责客户端, B负责服务器端 思路: 1. 抽象出类: 1.1 客户端显示类(Terminal) 1.2 服务器端服务类(Trai ...
- JAVA飞信_java调用飞信接口发短信 - 贪吃蛇学院-专业IT技术平台
java调用飞信接口发短信,看到挺好的,有利于大家做毕业设计加亮点,就发给大家了(新人发帖,不会发多个文件名,测试类就放这了) 需要这3个jar包: commons-codec-1.4.jar com ...
- java来电_JAVA来电显示接口调用代码实例
代码描述:基于JAVA的来电显示接口调用代码实例 关联数据:手机固话来电显示 接口地址:http://www.juhe.cn/docs/api/id/72 import java.io.Buffere ...
- app中传递java数据_Java实现app接口和Socket消息传递(6)servlet映射并返回Json数据
原创: http://blog.csdn.net/iwanghang 1.建立Servers,根据你安装的Tomcat选择. 2.选择Tomcat路径.JRE版本可以选择项目默认或者选择你自己的JRE ...
- java 打印机_java调用打印机接口
全部代码: import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt ...
- Java下利用Jackson进行JSON解析和序列化
Java下利用Jackson进行JSON解析和序列化 转载于:https://www.cnblogs.com/jing1617/p/7009122.html
最新文章
- 简单快速修改大量重复代码(Intellij IDEA)
- iOS超全开源框架、项目和学习资料汇总:UI篇
- 什么是1+N模式的新一代城市大脑建设方案
- 移动端数据java后台接收
- C# Cookie操作类
- gitlab+keepalived
- 管理表空间和数据文件——维护表空间——设置默认表空间和删除表空间和删除数据文件盒临时文件...
- RocketMQ如何动态扩容和缩容
- 通俗的说这是一个一对多的例子,看看人家是怎么做的!
- popen后用fgets读数据的问题
- ENVI监督分类后背景值也被分成一种地物,解决方案和转移矩阵制作方法
- bcd 初始化库系统卷失败_应用程序正常初始化失败怎么办
- 怎么样添加桌面我的计算机,怎么样把我的电脑添加到桌面上
- 企业微信社群运营必建的4个内容体系
- 【点赞收藏】36个顶级数据分析方法与模型!
- 【电脑自动关机】开机后Mysql再也启动不起来了。问题解决
- css3 3D立体相册实现
- 中秋国庆长假,SEO你在坚持吗?
- 尔宾团队角色(Belbin Team Roles),亦被称为贝尔宾团队角色表(Belbin Team Inventory)
- 1569 B.Chess Tournament
热门文章
- ajax请求 apend,jsp如何获取ajax append的数据?
- 二级c语言上机题库及解析,2013年计算机二级C语言上机题库及答案解析(3)
- JAVA中CyclLink怎么用_Java多线程基本使用一
- vue 转为静态html,Vue CLI 3使用:HTML和静态资源(五)
- Shell 脚本知识回顾 (三) —— 替换、运算符、字符串、数组
- gsoap使用心得!
- linux内存映射函数mmap
- vsftpd默认用户名/密码
- pdf上传及预览;file上传pdf文件及预览;vue上传pdf文件及预览;vue-pdf预览pdf文件
- [react-router] 请你说说react的路由是什么?