2017-02-21 19 views
1

Я модель с полем аннотированного как:Джексон JsonMappingException: Неверный типа ID

@JsonTypeInfo(use = CLASS) 
private Object dudClass; 

Основная проблема, когда я пытаюсь десериализации этого объекта и я не имею этот экземпляр dudClass на пути к классам I получат исключение:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Invalid type id 'pl.erbel.DudClass' (for id type 'Id.class'): no such class found. 

Можно ли просто проигнорировать это исключение? Я не хочу игнорировать сериализацию/десериализацию, потому что мне это нужно в другом модуле. У меня просто два клиента: один с DudClass на classpath, а второй - без этого класса.

+2

Вы пробовали @JsonIgnore? – Coder

+0

Попробуйте использовать переходный процесс. –

+0

@Coder, если я использую JsonIgnore, я не смогу сериализовать/десериализовать это поле, не так ли? –

ответ

1

Возможно, это не идеальное решение, но это работа. Вместо того, чтобы иметь dudClass в вашем POJO, вы можете использовать дополнительные свойства, используя JsonAnyGetter и JsonAnySetter. Вы должны удалить dudClass из родительского класса и включают в себя следующий код

@JsonIgnore 
private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 

@JsonAnyGetter 
public Map<String, Object> getAdditionalProperties() { 
return this.additionalProperties; 
} 

@JsonAnySetter 
public void setAdditionalProperty(String name, Object value) { 
this.additionalProperties.put(name, value); 
} 

Что это делает при десериализации вместо того, чтобы пытаться установить каждый раз dudClass он устанавливает какие-либо дополнительные объекты, которые приходит в ответ на карте с именем объекта в качестве ключа (в вашем случае это dudClass) и содержимое объекта как значение. Вы просто видите, есть ли в карте ключ dudClass или нет.

Сообщите мне, если это не ответит на вашу проблему или вам необходимо уточнить!

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