Я пытаюсь установить кучу претензий, многие из которых содержат нулевые значения. Эти свойства должны существовать и необходимы для того, чтобы пользователь не был отклонен в клиентском приложении, даже если он нуль. Несмотря на это, внутренние сериализованные объекты содержат нулевые свойства. < /P>
Вот как я их добавляю, и решение, которое я пытался реализовать, то есть настройка объекта и использовать его в jwt Builder.public String generateTokenFromJwtUserDetails(JwtUserDetails userDetails) {
Date now = new Date();
Date expiryDate = new Date(now.getTime() + jwtExpiration);
Map claims = new HashMap();
claims.put("name", userDetails.getName()); // null, will not appear in jwt
claims.put("id", userDetails.getId()); // not null, appears
claims.put("tenant", userDetails.getTenant()); // contains null values that do end up in jwt
// rest of claims...
// here I tried to set serialization inclusion in a custom object mapper, doesn't work
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
// I also tried this, but won't work either
//objectMapper.enable(SerializationFeature.WRITE_NULL_MAP_VALUES);
try{
return Jwts.builder()
.json(new JacksonSerializer(objectMapper))
.claims(claims)
.subject(userDetails.getUsername())
.issuedAt(now)
.expiration(expiryDate)
.signWith(getSignInKey())
.issuer(jwtIssuer)
.compact();
}catch(Exception e){ // ...
}
< /code>
Дальнейшее разъяснение: < /p>
Я также включаю сущности в мой jwt, эти сущности сериализуются Джексоном со всеми их полями (поэтому у меня есть вложенные объекты с нулевыми ценностями, но это внешний JWT, который не принимает их). Например: < /li>
< /ol>
{
"id": "ibn12u3bio412i",
"tenant": {
"deletedOn": null,
}
}
< /code>
Hashmap действительно содержит все ключи и значения, даже если они Null.>
Подробнее здесь: https://stackoverflow.com/questions/790 ... wt-jackson