自定义反序列化工具类

在实体类中实现了 implements Serializable 序列化 还实现了 UserDetails 对传入的字段 authorities 返序列化失败

对字段 authorities 单独自定义反序列化工具类

下面是我的报错:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of org.springframework.security.core.GrantedAuthority (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information
at [Source: (PushbackInputStream); line: 1, column: 442] (through reference chain: com.abin.pojo.Admin[“authorities”]->java.util.ArrayList[2])

​ 上代码:CustomAuthorityDeserializer.class

/*** 自定义 Authority解析器*/
public class CustomAuthorityDeserializer extends JsonDeserializer { //@Overridepublic Object deserialize(JsonParser jsonParser, //JSON解析DeserializationContext deserializationContext) // 上下文throws IOException, JsonProcessingException {ObjectMapper mapper = (ObjectMapper) jsonParser.getCodec(); //得到Object对象JsonNode jsonNode = mapper.readTree(jsonParser); // readTree得到TreeNode对象,JsonNode有实现TreeNode接口List<GrantedAuthority> grantedAuthorities = new LinkedList<>(); // 返回Iterator<JsonNode> elements = jsonNode.elements(); // 得到迭代器 while (elements.hasNext()) {JsonNode next = elements.next();JsonNode authority = next.get("authority"); //需要对这个字段进行解析grantedAuthorities.add(new SimpleGrantedAuthority(authority.asText()));}return grantedAuthorities;}
}

在用的地方使用:重写 UserDetails 类的方法 getAuthorities()这个方法得到这个用户拥有的权限: 加上 @JsonDeserialize 注解来使用

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;@Override@JsonDeserialize(using = CustomAuthorityDeserializer.class) // 用注解 使用public Collection<? extends GrantedAuthority> getAuthorities() {List<SimpleGrantedAuthority> authorities = roles.stream().map(role -> new SimpleGrantedAuthority(role.getName())).collect(Collectors.toList());return authorities;}

自定义反序列化工具类相关推荐

  1. 自定义日期工具类 java 1614698552

    自定义日期工具类 java 1614698552 需求 思路 演练 日期转字符串的方法 字符串转日期方法 测试类 更多尝试 测试另一个方法

  2. 解密android日志xlog,安卓开发技巧2:自定义日志工具类XLog的实现

    安卓开发技巧二:自定义日志工具类XLog的实现 我们在开发过程中,打印日志是必不可少的一个调试环节,然而,直接使用系统自带的Log日志类,并不能满足我们实际项目的需求:假如我们现在在开发一款比较大的项 ...

  3. java序列化和反序列化工具_Java 序列化和反序列化工具类并解决StreamCorruptedException问题 | 学步园...

    问题: 若通过ObjectOutputStream向一个文件中多次以追加的方式写入Object,为什么用ObjectInputStream读取这些Object时,会产生StreamCorruptedE ...

  4. 弄清std::chrono::system_clock::time_point,自定义时间工具类

    time_t 是32位的整数,用来存放格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,不能表示毫秒,约能表示135年 time ...

  5. hutool 自定义excel_HuTool工具类使用之Excel文档的导入导出

    HuTool工具类使用之Excel文档的导入导出 前言 在日常的工作开发中,Excel的导入和导出是必不可少的,如果自己写相应的导入导出方法,会显得十分繁琐,本文采用Hutool工具类实现的Excel ...

  6. 自定义数据字典工具类

    字典注解 类注解 import lombok.NonNull; import java.lang.annotation.*;/*** 数据字典类注解** @author huxiang*/ @Targ ...

  7. 自定义RunTimeException工具类

    文章目录 自定义异常MyInfoException,将异常提示传递给前端 1. 定义一个异常的工具类extends RuntimeException 2. 封装统一的响应工具类 自定义异常MyInfo ...

  8. JDBC基础篇(MYSQL)——自定义JDBCUtil工具类

    package util;import java.io.File; import java.io.InputStream; import java.sql.Connection; import jav ...

  9. ThinkPHP3验证码、文件上传、缩略图、分页(自定义工具类、session和cookie)

    验证码 TP框架中自带了验证码类 位置:Think/verify.class.php 在LoginController控制器中创建生存验证码的方法 login.html登陆模板中 在LoginCont ...

最新文章

  1. 【错误记录】Flutter 界面跳转报错 ( Navigator operation requested with a context that does not include a Naviga )
  2. C语言文件读写(2)-文本文件写操作
  3. Scala模式匹配细节说明
  4. 【特征选择】基础知识
  5. 拦截retrofit数据请求返回的信息来判断程序错误点
  6. notepad拼心形_配置基于NotePad++工具下的C#开发环境
  7. openEuler Summit 带你解锁开源与操作系统的不解之缘
  8. 金蝶kis云,调用增删改查注意点
  9. django 获取环境变量_django 环境变量配置过程详解
  10. 加载项目失败的解决办法
  11. 【Oracle】rollup函数
  12. 电机正反转的远程计算机控制,plc控制电机正反转原理图
  13. python编写计算器(图形界面)
  14. 如何恢复计算机隐藏的文件夹,隐藏文件夹,小编教你电脑隐藏文件夹怎么恢复...
  15. Java写的小游戏贪吃蛇代码
  16. 超详细的《使用腾讯云移动直播开发连麦》
  17. mac辅助功能授权无效
  18. 《全面解读IPTV生态链》-转自CSDN
  19. 软件开发学习的5大技巧,你知道吗?
  20. 零基础搭建私人影音媒体平台【远程访问Jellyfin播放器】

热门文章

  1. default语句java_default关键字用法
  2. php js写法,javaScript封装的各种写法
  3. 小马哥--高仿红米note T208联通版移植测试完美版4g 刷机包 开机界面面观
  4. win10关闭快速启动_为什么Win10关机不彻底,按下键盘就开机还很耗电,怎么解决?...
  5. 【已解决】Exception in thread “main“ java.lang.IllegalArgumentExcept: illegal initialSize 6, maxActive 5
  6. 深入浅出游戏算法(3)-lua脚本
  7. vue生命周期函数可以操作dom_vue生命周期钩子函数
  8. windowsservice占内存多么_12GB内存只需不到四千元,性价比和体验兼顾的联想小新Air 14...
  9. pythonzeros函数_numpy zeros 函数
  10. JS 将Json转Geojson