Como corrigir JSON erro de descodificação na Primavera?

OCPI:

Estou enviando um objeto Usuário através de repouso, que contém um conjunto de SimpleGrantedAuthorityobjetos. No lado do receptor, estou recebendo uma exceção:

org.springframework.core.codec.DecodingException: JSON descodificação de erro: Não é possível construir exemplo de org.springframework.security.core.authority.SimpleGrantedAuthority(embora, pelo menos, um Criador existe): não é possível a partir de desserializá valor objecto (não delegate- ou Criador à base de propriedade);

Estou usando o mapeador de JSON padrão que Primavera Bota 2.1.2 fornece. No lado de receber, estou usando o WebClient do WebFlux (WebTestClient neste caso).

Alguém pode me explicar por que estou recebendo este erro e como resolvê-lo?

rustyx:

SimpleGrantedAuthoritynão é adequado para o mapeamento automático com Jackson; ele tem construtor não não-arg e sem setter para o authoritycampo.

Então, ele precisa de um costume desserializador . Algo assim:

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());
    }
}

Registre-lo com Jackson em todo o mundo como este:

objectMapper.registerModule(new SimpleModule().addDeserializer(
                      SimpleGrantedAuthority.class, new SimpleGrantedAuthorityDeserializer()));

Ou anotar o campo (s) com:

@JsonDeserialize(using = SimpleGrantedAuthorityDeserializer.class)

Nota: você não precisa de um serializer porque SimpleGrantedAuthoritytem o getAuthority()método, que é utilizável por Jackson.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=204075&siteId=1
Recomendado
Clasificación