Ich habe ein unveränderliches Objekt SimpleGrantedAuthority
von Feder, die keinen Argon-Konstruktor hat. Stattdessen ist es ein unveränderliches Objekt mit nur 1 einzigen arg Konstruktor wie folgt aus:Konfigurieren Sie Jackson für die Verwendung von Single-Arg-Konstruktor
public SimpleGrantedAuthority(String role) {
Assert.hasText(role, "A granted authority textual representation is required");
this.role = role;
}
Ich versuche, eine Zeichenfolge zu diesem Objekt deserialisieren, und ich habe keinen Zugriff auf den Quellcode dieser Datei. Hier ist die Ausnahme, die ich erhalten:
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)
Wie ich schon sagte, ich nicht den Quellcode haben und ich kann die @JsonCreator
Annotation nicht hinzufügen, so frage ich mich, wie jackson konfigurieren die richtige Konstruktor zu verstehen, zu nutzen. Etwas in etwas wie:
Module module = new SimpleModule("MyModule") {
@Override
public void setupModule(Module.SetupContext context) {
context.addAbstractTypeResolver(new SimpleAbstractTypeResolver().addMapping(GrantedAuthority.class, SimpleGrantedAuthority.class));
}
};
Danke
EDIT
habe ich versucht, den Vorschlag von Shashank so habe ich diese Klasse:
abstract class SimpleGrantedAuthorityMixIn {
@JsonCreator
SimpleGrantedAuthorityMixIn(@JsonProperty("authority") String authority) {
}
}
und dann registriert ich es so:
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);
aber ich sehe immer noch die gleiche Ausnahme.
Vielen Dank - ich habe es versucht, aber es funktioniert nicht :( –
Aktienemission/Ausnahme – Shashank
Es sollte aktualisierten Code arbeiten, um es versuchen, auch Donot Sie 'Kontext brauchen .setMixInAnnotations (SimpleGrantedAuthority.class, SimpleGrantedAuthorityMixIn.class); 'Auch sagen Sie mir, welche Version von Jaackon Sie verwenden – Shashank