mam coś JSON obiektów takich jak:Jak zignorować pola wyliczeniowe w mapowaniu Jackson JSON-to-Object?
{"name":"John", "grade":"A"}
lub
{"name":"Mike", "grade":"B"}
lub
{"name":"Simon", "grade":"C"}
itp
staram się odwzorować powyższy JSON do:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Employee{
@JsonIgnoreProperties(ignoreUnknown = true)
public enum Grade{ A, B, C }
Grade grade;
String name;
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
wyżej mapowanie działa dobrze, ale w przyszłości będzie więcej rodzajów „gatunek” powiedzmy D, E itd który łamie istniejące mapowanie i rzuca następujący wyjątek
05-08 09:56:28.130: W/System.err(21309): org.codehaus.jackson.map.JsonMappingException: Can not construct instance of Employee from String value 'D': value not one of declared Enum instance names
Czy istnieje sposób, aby ignorować nieznane pola za pomocą typów enum?
Dzięki
Adnotacja '@ JsonIgnoreProperties' nie działa w sposób oczekiwany dla typów' Enum'; tylko (obecnie) pozwala ignorować nieznane właściwości POJO. Ale myślę, że ma to sens jako pomysł na ulepszenie. Czy mógłbyś zgłosić problem w projekcie [Jackson databind] (https://github.com/FasterXML/jackson-databind)? Jeśli tak, może może być dodane w Jackson 2.3? – StaxMan
Odpowiedzi są nieco pełne. Dla tych, którzy szukają najszybszego i najprostszego rozwiązania: ustaw "READ_UNKNOWN_ENUM_VALUES_AS_NULL" [funkcja deserializacji] (https://github.com/FasterXML/jackson-databind/wiki/Deserialization-Features#value-conversions) na true. – Jonik