У меня проблема с пользователем 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]
Может ли кто-нибудь мне помочь?
является то, что полный JSON генерируется 'методом serialize'? –
на всякий случай, если у вас есть время, если вы получите источники Джексона, вы можете отладить его, чтобы узнать, какие объекты и данные управляются при возникновении ошибки. –
Да, Fran, Это полный json, который нужно сериализовать. – gleX