При расшифровке JJWT строки JSON удалены кавычки -Java

Мой веб-сайт отправляет JWT (встроенный в php) в мое приложение, разработанное на Java.

JWT содержит строку JSON внутри настраиваемого поля с именем DATI. Я использую библиотеку JJWT для расшифровки строки, содержащейся в поле DATI:

Claims MY_CLAIMS = Jwts.parser().setSigningKey(SECRET_KEY__Byte).parseClaimsJws(STRING_JWT).getBody(); 
ArrayList ARRAY = MY_CLAIMS .get("DATI", ArrayList.class);
String DECODED_STRING_INSIDE_DATI =String.valueOf(ARRAY);

Я правильно получаю строку "DECODED_STRING_INSIDE_DATI" (это строка JSON), но по какой-то причине кавычки (") удалены:

[{id=3, id_rivenditore=-1, id_cliente=-1, ip_address=192.168.1.6, nome=DonalDuck, note=ByBye, enabled=1}]

Я проверил STRING_JWT в "https://jwt.io/", и там я правильно получаю кавычки:

{
  "iss": "www.mySite.it",
  "exp": 1536913435,
  "sub": "WebApp",
  "DATI": [
    {
      "id": "3",
      "id_rivenditore": "-1",
      "id_cliente": "-1",
      "ip_address": "192.168.1.6",
      "nome": "DonalDuck",
      "note": "ByBye",
      "enabled": "1"
    }
  ]
}

Я действительно не знаю, как это решить, потому что я не могу правильно прочитать строку JSON. Я использую библиотеку Джексона для чтения Json String


person Fausto70    schedule 13.09.2018    source источник
comment
Можете ли вы опубликовать пример для него?   -  person Maruthi Adithya    schedule 13.09.2018
comment
как ты расшифровал токен?   -  person benjamin c    schedule 13.09.2018
comment
Привет добавил код и пример в текст вопроса   -  person Fausto70    schedule 14.09.2018
comment
Опубликован пример @Maruthi Adithya   -  person Fausto70    schedule 14.09.2018
comment
@benjamin c Код для декодирования опубликованного токена   -  person Fausto70    schedule 14.09.2018
comment
@ Fausto70, зачем тебе кавычки?   -  person benjamin c    schedule 14.09.2018
comment
@benjamin c без кавычек преобразование строки JSON в объект (созданное библиотекой Джексона) не удалось. Учтите, что если я не использую кодировку JWT, строка отправляется (в чистом виде) с кавычками, и все работает правильно. Когда я использую кодировку JWT, кавычки исчезают, и она не работает.   -  person Fausto70    schedule 14.09.2018
comment
@ Fausto70, так что вам просто нужно преобразовать DATI обратно в объект?   -  person benjamin c    schedule 14.09.2018
comment
@benjamin c Да, есть. Я попытался с некоторой настройкой десериализации в Джексоне (чтобы преобразовать без кавычки), но безуспешно   -  person Fausto70    schedule 14.09.2018
comment
@ Fausto70, мой ответ тебе подходит?   -  person benjamin c    schedule 14.09.2018


Ответы (1)


Это может помочь,

У вас уже есть ArrayList, содержащие необходимые утверждения, например,

ArrayList ARRAY = MY_CLAIMS.get("DATI", ArrayList.class);

Чтобы получить строку утверждений JSON, включенную в этот ArrayList, попробуйте приведенный ниже код.

ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(out, ARRAY);
byte[] data = out.toByteArray();
String str = new String(data);

str содержит правильно отформатированную строку JSON (с кавычками).

person benjamin c    schedule 14.09.2018
comment
@ Fausto70 и рассмотрите возможность использования соглашений об именах Java для именования переменных :) - person benjamin c; 14.09.2018