2012-03-08 3 views
1

я следующая строка для разбора (строка объекта):Deserialize ошибка Джексона (PNG кодирования)

{ "langues" : 
    [ 
     {"iso":"en", "id":1, "flag":[0,144,255,62,1,152,84,62,1,104,50,63,1,32,90,61,1,172,110,66,1,216,...]} 
     , 
     {"iso":"fr", "id":2, "flag":[0,208,0,63,1,208,106,62,1,120,49,63,1,32,90,61,1,60,110,...]} 
     , 
     { etc... } 
    ], 
    "when" : 133111... // timestamp 
} 

flag представляет собой массив байт для PNG изображения

И следующие объекты:

public class Langues { 
    private Long when; 
    private ArrayList<Langue> langues; 

    public Long getWhen(){ return when; } 
    public void setWhen(Long when) { this.when=when; } 
    ... 
} 

public class Langue { 
    private int id; 
    private String iso; 
    private byte[] flag; 

    // getters/setters 
} 

это бросить мне ошибку:

ObjectMapper mapper = new ObjectMapper(); 
Langues node = mapper.readValue(myString, Langues.class); 

JsonParseException

Numeric value (144) out of range of Java byte 

возможно байт [] не является правильным контейнером для него, или я могу установить джексон анализатор кодирования где-нибудь?

спасибо заранее!

[EDIT]

возможно редактирование каждого поля массива байт с -128 мог бы это сделать, но вид хитрым и реальная трата времени ...

я связался Codehaus благодаря списку рассылки и Я не закончил с AnsiString вместо UNICODE или Bytes, и voilà!

{"langues":[{"iso":"zh","id":7,"flag":"iVBORw0KGgoAAAANSUhEUgAAAIAAAABpCAYAAADy... 

с таким же простым кодом

ObjectMapper mapper = new ObjectMapper(); 
Langues node = mapper.readValue(myString, Langues.class); 
+0

Является 'Langue' общедоступным класс? У меня когда-то была ошибка, и проблема заключалась в том, что я объявлял закрытый класс, а не публичным. Каковы геттеры и сеттеры? – Shiki

+0

'Langue' и' Langues' являются публичным классом в своих собственных java-файлах с простыми геттерами и сеттерами, такими как 'public int getId() { return id; } public void setId (int id) { this.id = id; } 'that's all – Darkendorf

+0

Я отредактировал все мое сообщение – Darkendorf

ответ

1

Возможно редактирование каждого поля массива байт с -128 мог бы это сделать, но вид хитрым и реальная трата времени ...

Я связался с Codehaus благодаря списку рассылки, и я закончил с AnsiString вместо UNICODE или Bytes, и voilà!

{"langues":[{"iso":"zh","id":7,"flag":"iVBORw0KGgoAAAANSUhEUgAAAIAAAABpCAYAAADy... 

с таким же простым кодом

ObjectMapper mapper = new ObjectMapper(); 
Langues node = mapper.readValue(myString, Langues.class); 
Смежные вопросы