JJWT getBody() 删除双引号

问题描述 投票:0回答:2

我正在用

jwsClaims.getBody()
解析 JWT,我得到的输出如下所示:

{
    iss=issuer, 
    [email protected], 
    roleName=user, 
    companyName=company, 
    iat=1493790315, 
    exp=1494395115
}

输出应该是 JSON,但它缺少键和值周围的双引号 (")。我尝试在 JSON 上使用对象映射器,但收到错误消息:

IOException in fromJson: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('i' (code 105)): was expecting double-quote to start field name at [Source: {iss=issuer, [email protected], roleName=user, companyName=company, iat=1493790315, exp=1494395115}; line: 1, column: 3]

您知道为什么声明中缺少引用吗?

jjwt
2个回答
0
投票

我也有同样的问题。不是 getBody() 删除双引号,而是

parse
使用
ObjectMapper.readValue()
并将 json 转换为
Map
我还没有找到 jjwt 的解决方案,所以我更改为
jose4j
并让它工作。

希望这也能帮助你。


0
投票

声明的主体可能是某种类型的对象映射,在这种情况下,假设声明主体不为空,这应该可以工作:

import com.google.gson.Gson;

try {
    Gson gson = new Gson();
    System.out.println(gson.toJson(body));
} catch (Exception e1) {
    System.out.println("body class: "+body.getClass().getName());
    System.out.println(body.toString());
}

如果结果仍然不符合预期,那么您可能可以从主体的类中收集一些信息,这些信息将在异常中打印,或者您可能需要更改代码以在 try/catch 之前首先打印类类型.

© www.soinside.com 2019 - 2024. All rights reserved.