SimpleGrantedAuthority
не подходит для автоматического картирования с Джексоном; у него нет конструктора без аргументов и нет установщика для поля authority
.
Так что для этого нужен специальный десериализатор . Примерно так:
class SimpleGrantedAuthorityDeserializer extends StdDeserializer<SimpleGrantedAuthority> {
public SimpleGrantedAuthorityDeserializer() {
super(SimpleGrantedAuthority.class);
}
@Override
public SimpleGrantedAuthority deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
JsonNode tree = p.getCodec().readTree(p);
return new SimpleGrantedAuthority(tree.get("authority").textValue());
}
}
Зарегистрируйте это с Джексоном по всему миру, как это:
objectMapper.registerModule(new SimpleModule().addDeserializer(
SimpleGrantedAuthority.class, new SimpleGrantedAuthorityDeserializer()));
Или пометьте поля (полей) с помощью:
@JsonDeserialize(using = SimpleGrantedAuthorityDeserializer.class)
Примечание: вам не нужен сериализатор , потому что SimpleGrantedAuthority
имеет метод getAuthority()
, который используется Джексоном.