При описании 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

Вы можете опубликовать для этого пример?

Maruthi Adithya 13.09.2018 18:49

как ты расшифровывал токен?

benjamin c 13.09.2018 18:52

Привет, добавил код и пример в текст вопроса

Fausto70 14.09.2018 09:41

Опубликован пример @Maruthi Adithya

Fausto70 14.09.2018 13:52

@benjamin c Код для декодирования размещенного токена

Fausto70 14.09.2018 13:53

@ Fausto70 зачем тебе кавычки?

benjamin c 14.09.2018 13:58

@benjamin c без кавычек отмечает, что преобразование строки JSON в объект (созданный библиотекой Джексона) не удалось. Учтите, что если я не использую кодировку JWT, строка отправляется (в открытом виде) с кавычками, и все работает правильно. Когда я использую кодировку JWT, кавычки исчезают, и это не работает.

Fausto70 14.09.2018 14:23

@ Fausto70, так что вам просто нужно преобразовать DATI обратно в объект?

benjamin c 14.09.2018 14:39

@benjamin c Да, есть. Я попытался выполнить настройку десериализации в Джексоне (чтобы преобразовать без кавычек), но безуспешно

Fausto70 14.09.2018 14:56

@ Fausto70 мой ответ вам подходит?

benjamin c 14.09.2018 15:00
0
10
417
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 (в кавычках).

@ Fausto70 и рассмотрите возможность использования соглашений об именах java для именования переменных :)

benjamin c 14.09.2018 15:54

Другие вопросы по теме