2016-04-14 5 views
0

У меня есть данные в формате JSON, который передается через REST WebService:Джексон Mapper: Невозможно преобразовать объект JSON в класс Java Singleton

"dimension": { 
    "@type": "com.example.multi.MultiDimension", 
    "listId": "tempListId1", 
    "key": "PERN", 
    "displayName": "Personal" 
    } 

Теперь многомерном является классом Singleton, то есть имеющий частного конструктора , Так что Джексон не смог найти публичного конструктора и дал ошибку синтаксического анализа.

No suitable constructor found for type [simple type, class com.example.multi.MultiDimension]: can not instantiate from JSON object (need to add/enable type information?)\n at [Source: [email protected]; line: 8, column: 9] 

Ну, тогда я добавил общественный конструктор в классе многомерным и, как ожидается, он работал.

Меня беспокоит то, что из класса Singleton я сделал его открытым, является их какой-либо способ, где я могу по-прежнему есть Singleton класс и Джексон Mapper можно сопоставить класс с указанием имени метода т.е. getInstance() из класса

+0

, как я помню, что вам нужно пустой подрядчик не частная –

+1

Вы можете использовать '@ JsonCreator' на вашем GetInstance)' 'метода (. – dambros

+0

Разве вы не думаете здесь что-то не так? Входящие данные, которые предполагается десериализовать в объект, не должны считываться в одноэлементный. Мне трудно понять разумный вариант использования. Если я хочу, чтобы материал был передан в синглтон, я бы сначала десериализовал это на объект передачи данных, который затем вводится в синглтон, как относящийся к области. – Lmickos

ответ

1

вы можете использовать @jsonCreator и paramtere можно так.

@JsonCreator 
public static MultiDimension getInstance(@JsonProperty("key") String key) {...} 
Смежные вопросы