<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      java~jackson實現接口的反序列化

      jackson是springboot中集成的序列化方式,是默認的json序列化方式,當然你可以使用其它的序列化工具代替它,不過今天我們還是說一下它,使用jackson進行序列化一個類,然后再把它的JSON字符反序列化為它的接口對象。

      現實

      1. 這種方式默認是不行的,因為接口不能被自動實例化
      2. 使用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<DefaultResourceUser> {
      
              @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<GrantedAuthority> simpleGrantedAuthorities = new ArrayList<>();
                          Iterator<JsonNode> 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;
              }
      

      在接口上使用它
      ``java
      @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

      posted @ 2020-12-09 20:35  張占嶺  閱讀(3766)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日本丰满护士bbw| 狠狠色狠狠色五月激情| 麻豆蜜桃av蜜臀av色欲av | 色综合人人超人人超级国碰| 俺来也俺去啦最新在线| 运城市| 欧美变态另类牲交| 精品中文字幕人妻一二| 国产乱码精品一区二三区| 亚洲日韩性欧美中文字幕| 日韩在线一区二区每天更新| 99热久久这里只有精品| 中文字幕成熟丰满人妻| 偷拍久久大胆的黄片视频| 丰满岳乱妇一区二区三区| 丰满的少妇一区二区三区 | 四川丰满少妇无套内谢| 一区二区三区激情都市| 护士张开腿被奷日出白浆| 中文字幕亚洲综合久久| 国产在线亚州精品内射| 国产成人一区二区三区免费| 精品久久久久久中文字幕202| 麻豆国产成人av高清在线| 色伦专区97中文字幕| 免费乱理伦片在线观看| 激情综合网激情国产av| 激情五月开心婷婷深爱| 婷婷丁香五月六月综合激情啪| 久久亚洲精品成人av无| 成人网站免费观看| 国产精品久久久国产盗摄| 大香网伊人久久综合网2020| 亚洲一区二区三区| 人妻系列无码专区免费| 华安县| 国产精品国产三级国av| 亚洲色大成网站www永久男同| 国产一区视频一区欧美| 精品麻豆国产色欲色欲色欲WWW| 亚洲一区二区精品极品|