Ошибка: Should never call 'set' on setterless property

204
13 февраля 2018, 07:46

Получил ошибку, когда мытался десериализовать ответ в Jackson

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Can not construct instance of org.proj.model.profile.Profile, problem: Should never call 'set' on setterless property
 at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@2d881384; line: 10, column: 1] (through reference chain: java.util.ArrayList[0]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of org.proj.model.profile.Profile, problem: Should never call 'set' on setterless property
at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@2d881384; line: 10, column: 1] (through reference chain: java.util.ArrayList[0])
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:208)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:200)

В этом месте, я добавил в конструктор Profile еще одну переменную

@JsonProperty("childrens") List<String> childrens

и появилась ошибка после вызова:

return restClient.exchange(PROFILES_URL + "/name" + path, HttpMethod.GET, restClient.makeHttpEntityWithAuth(), new ParameterizedTypeReference<Collection<Profile>>() {
            });

Искал в иентернете по названию ошибки, не нашел.

Класс Profile:

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Profile{
private final String id;
private final List<String> childrens;
public Profile(
        @JsonProperty("id") String id,
        @JsonProperty("childrens") List<String> childrens) {
    this.id = id;
    this.childrens = childrens;
}
public String getId() {
    return id;
}
public List<String> getChildrens() {
    return childrens;
}

В чем может быть дело?

Answer 1

Вы забыли про @JsonCreator у конструктора. Поэтому Jackson и пытается использовать Setter вместо constructor, а setter'а у вас как раз и нет.

@JsonCreator //here
public Profile(
         @JsonProperty("id") String id,
         @JsonProperty("childrens") List<String> childrens) {
     this.id = id;
     this.childrens = childrens;
}

Вот еще немного по теме

READ ALSO
Ошибка websocket + spring + weblogic 12.2.1.3

Ошибка websocket + spring + weblogic 12.2.1.3

При переходе на новую версию weblogic (122

460
Контроллер для интерфейса в java?

Контроллер для интерфейса в java?

Хорошая ли идея для контроллера создавать интерфейс?

169
Рекурсивный обход дерева в глубину на JAVA (postOrder)

Рекурсивный обход дерева в глубину на JAVA (postOrder)

У меня есть файл relationsjson, в котором отражена структура {id, node, parent, level}, где:

204
Websocket задержка пересылки пакетов

Websocket задержка пересылки пакетов

Приветствую! Между клиентом и сервером через WebSocket как в синхронном, так и асинхронном режиме периодически возникает задержка пересылки...

188