У меня есть неизменный объект SimpleGrantedAuthority
с весны, у которого нет конструктора no-arg. Вместо этого он непреложный объект только один сингл-Arg конструктора так:Настроить jackson для использования конструктора с одним аргументом
public SimpleGrantedAuthority(String role) {
Assert.hasText(role, "A granted authority textual representation is required");
this.role = role;
}
Я пытаюсь десериализации строки этого объекта и не имею доступ к исходному коду этого файла. Вот исключение я получаю:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of org.springframework.security.core.authority.SimpleGrantedAuthority: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)
at [Source: [email protected]; line: 7, column: 7] (through reference chain: com.nemesis.platform.facade.email.data.EnrichedEmailMessageContextData["customer"]->com.nemesis.platform.facade.user.data.EnrichedUserDetails["authorities"]->java.util.ArrayList[0])
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270)
at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:1456)
Как я уже сказал, я не исходный код, и я не могу добавить @JsonCreator
аннотации, так что мне интересно, как настроить джексон, чтобы понять правильный конструктор использовать. Что-то в подобных:
Module module = new SimpleModule("MyModule") {
@Override
public void setupModule(Module.SetupContext context) {
context.addAbstractTypeResolver(new SimpleAbstractTypeResolver().addMapping(GrantedAuthority.class, SimpleGrantedAuthority.class));
}
};
Спасибо
EDIT
Я попытался внушение Shashank, так что я создал этот класс:
abstract class SimpleGrantedAuthorityMixIn {
@JsonCreator
SimpleGrantedAuthorityMixIn(@JsonProperty("authority") String authority) {
}
}
, а затем я зарегистрировал его например:
Module module = new SimpleModule("SamplestoreModule") {
@Override
public void setupModule(Module.SetupContext context) {
context.addAbstractTypeResolver(new SimpleAbstractTypeResolver().addMapping(GrantedAuthority.class, SimpleGrantedAuthority.class));
context.setMixInAnnotations(SimpleGrantedAuthority.class, SimpleGrantedAuthorityMixIn.class);
}
};
objectMapper.registerModule(module);
objectMapper.addMixIn(SimpleGrantedAuthority.class, SimpleGrantedAuthorityMixIn.class);
но я все еще вижу то же исключение.
Спасибо - я пробовал, но он не работает :( –
Эмиссионный/исключение – Shashank
Он должен работать, обновленный код попробовать, и вы выигрыш нужно 'контекст .setMixInAnnotations (SimpleGrantedAuthority.class, SimpleGrantedAuthorityMixIn.class); 'Также скажите мне, какую версию jaackon вы используете – Shashank