日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jackson java网络接口_java~jackson实现接口的反序列化

發布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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实现接口的反序列化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久这里有 | 免费日韩| 成年人免费在线观看视频网站 | 亚州精品视频 | av调教| 欧美偷拍少妇精品一区 | 午夜裸体性播放 | 久久av免费 | 天天拍夜夜拍 | 在线看三级| proumb性欧美在线观看 | 少妇2做爰bd在线意大利堕落 | 在线免费黄色片 | 国产精品九 | www.天堂av | 捆绑最紧bdsm视频 | 日韩高清av | 99热官网| 日韩一级黄色大片 | 日本a√在线观看 | 色屁屁www影院免费观看入口 | 人妻无码中文字幕 | 久久久久九九九 | 亚洲在线精品视频 | 国产高清久久 | 亚洲欧美另类自拍 | 黄频在线免费观看 | 萌白酱喷水视频 | 亚洲国产成人在线观看 | 天天插天天| 奇米影视四色7777 | 91亚洲国产成人精品一区 | 精品一区二区中文字幕 | 免费在线观看中文字幕 | 亚洲在线色 | 专干中国老太婆hd | 最新国产网址 | 国产精品一卡二卡三卡 | 中文一区在线 | 超碰xxx | 超清av在线 | 欧洲国产精品 | 中国毛片基地 | 亚洲午夜精品久久久 | av高清一区二区 | 四虎影视黄色 | 国产精品久久久久毛片软件 | 激情播播网 | 欧美 日韩 国产 亚洲 色 | 国产十八熟妇av成人一区 | 天天人人精品 | 亚洲天堂手机在线观看 | 伊人av综合网 | 香蕉av一区二区 | 蜜臀久久99静品久久久久久 | 综合av| 天天狠天天插 | 97国产免费 | 五月天激情电影 | 91丝袜呻吟高潮美腿白嫩 | 九色论坛 | 国产精品色呦呦 | 波多野结衣一区二区三区高清 | 久久精品97 | 亚洲生活片| 成人免费看片98欧美 | 日韩污视频在线观看 | 国产偷自拍| 一区二区三区国产 | 131美女爱做视频 | 尤物精品 | 婷婷丁香激情 | 91青草视频 | 性欧美videossex精品 | 超碰在线免费看 | 国产精品国产三级国产aⅴ 欧美bbbbbbbbbbbb18av | 秋霞在线视频观看 | 91黄免费| 在线视频播放大全 | 啪啪免费网站 | 黄色片一级 | 久热精品视频在线观看 | 黄色网址www | 亚洲一区二区在线免费 | 国产成人小视频 | 久久精品免费看 | 人妻精品一区二区在线 | 182tv午夜福利在线观看 | 亚洲av熟女高潮一区二区 | 青青草自拍视频 | 免费观看av| 日韩av无码一区二区三区不卡 | 少妇饥渴放荡91麻豆 | 4388成人网 | 欧美性xxxxx极品少妇 | 国产乱子一区二区 | 草久在线观看视频 | 撕开少妇裙子猛然进入 | 日本肉体xxxx裸体xxx免费 |