2015-07-06 5 views
0

У меня проблема с пользователем Codehaus Jackson. У меня есть объект с следующими атрибутами и картографом декларацией:JsonMappingException: Неожиданный токен (START_OBJECT)

public class AuthenticatedPrincipal implements Serializable, Principal { 
     @JsonIgnore 
     private final static ObjectMapper mapper = new ObjectMapper().enable(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY).enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL) 
     .setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL).setVisibility(JsonMethod.FIELD, JsonAutoDetect.Visibility.ANY); 

    private String name; 

    private Collection<String> roles; 

    private Collection<String> groups; 

    private boolean adminPrincipal; 
... 
    @JsonIgnore 
    public String serialize() { 
    try { 
     return mapper.writeValueAsString(this); 
    } catch (IOException e) { 
     throw new RuntimeException("Unable to serialize Principal:" + toString(), e); 
    } 
    } 

    @JsonIgnore 
    public static AuthenticatedPrincipal deserialize(String json) { 
    try { 
     return mapper.readValue(json, AuthenticatedPrincipal.class); 
    } catch (IOException e) { 
     throw new RuntimeException("Unable to serialize Principal:" + json, e); 
    } 
    } 
} 

Это используется из другого класса:

public class AuthRequest { 

    @Transient 
    private AuthenticatedPrincipal principal; 
    @PreUpdate 
    @PrePersist 
    public void encodePrincipal() { 
    if (principal != null) { 
     this.encodedPrincipal = principal.serialize(); 
    } 
    } 

    @PostLoad 
    @PostPersist 
    @PostUpdate 
    public void decodePrincipal() { 
    if (StringUtils.isNotBlank(encodedPrincipal)) { 
     this.principal = AuthenticatedPrincipal.deserialize(encodedPrincipal); 
    } 
    } 
} 

Когда я исполняю Funtionality, которые генерируют строку, как это:

Principal:{"adminPrincipal":false,"displayName":"sdfas","groupAware":false,"name":"sdfas"} 

Когда метод AuthenticatedPrincipal.deserialize (encodedPrincipal); называется разбор параметра Json, но этот метод терпит неудачу с этой ошибкой:

org.codehaus.jackson.map.JsonMappingException: Unexpected token (START_OBJECT), expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRAY type information for class com.trent.app.lib.principal.AuthenticatedPrincipal 
at [Source: [email protected]; line: 1, column: 1] 

Может ли кто-нибудь мне помочь?

+0

является то, что полный JSON генерируется 'методом serialize'? –

+0

на всякий случай, если у вас есть время, если вы получите источники Джексона, вы можете отладить его, чтобы узнать, какие объекты и данные управляются при возникновении ошибки. –

+0

Да, Fran, Это полный json, который нужно сериализовать. – gleX

ответ

1
Principal:{"adminPrincipal":false,"displayName":"sdfas","groupAware":false,"name":"sdfas"} 

Недействителен JSON. Он должен выглядеть следующим образом

{"adminPrincipal":false,"displayName":"sdfas","groupAware":false,"name":"sdfas"} 

(без Principal: в начале)

+0

Твой прав Симон, это неправда Json, я поставил объект print, я просто проверил параметр String и это допустимый json {"adminPrincipal": false, "displayName": "sdfas", "groupAware": false "название": "sdfas"} – gleX

Смежные вопросы