2013-11-29 6 views
2

На этом ресурсе уже есть same issue. Но ответ кажется полностью неправильным для меня, и не работает для меня.JSON: де-сериализация подтипов

Какая проблема:

com.fasterxml.jackson.databind.JsonMappingException: не удалось разрешить идентификатор типа 'MyRequest $ GETALL' в подвид [простой тип, класс запрос ]

То, что я имел:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "@class") 
@JsonSubTypes({ @JsonSubTypes.Type(value = MyRequest.GetAll.class)}) 
public class Request { 
} 

public class MyRequest extends Request { 

    public static class GetAll extends MyRequest { 
     public GetProfiles() { 
    } 
} 

То, что я пытался сделать:

Я пытался следовать that советы, и перейти в регистрации подтипы из аннотации к Java-код:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "@class") 
public class Request { 
} 

public class MyRequest extends Request { 

    public static class GetAll extends MyRequest { 
     public GetProfiles() { 
    } 
} 

public class Utils { 
    private static final ObjectMapper mapper; 

    static { 
     mapper = new ObjectMapper(); 
     registerSubtypes(); 
     mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false); 
     mapper.configure(SerializationFeature.INDENT_OUTPUT, true); 
     mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); 
    } 

    private static registerSubtypes() { //REGISTER ALL SUBTYPES 
     mapper.registerSubtypes(MyRequest.GetAll.class); 
     //... 
    } 
} 

Но нет результата, Я все еще получаю исключение! Самое любопытное в этой ситуации, что он отлично работает на моей локальной машине, но не работает после развертывания.

Вопрос:

Что я должен попытаться решить эту проблему?

ответ

1

Не уверен, что имеет значение, но вы можете использовать @JsonTypeName в подтипе, чтобы явно называть его, вместо того чтобы полагаться на простое имя класса. Это безопаснее поддерживать и реже вызывать проблемы, если вы реорганизуете вещи (например, переместите класс на другой пакет).

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