2013-09-17 8 views
1

Я передаю 2D-массив JSON на контроллер пружины, но получаю ошибку Джексона.Как использовать Jackson для десериализации 2D-массива

org.codehaus.jackson.map.JsonMappingException: 
    Can not deserialize instance of java.lang.String[] out of VALUE_NUMBER_INT token 

Мой 2D-массив Javascript выглядит следующим образом.

[ ["John", "Doe", "worker", "fulltime"], 
    ["Adam", "Smith", "nonworker", "temp"], 
    ["Jane", "Doe", "worker", "fulltime"] ] 

Класс bean-класса он сопоставляется с 2D-массивом, подобным этому.

public class MyBean implements java.io.Serializable { 

    private static final long serialVersionUID = -3948256457L; 


    String[][] workInfo = null; 


    public String[][] getWorkInfo() { 
     return workInfo; 
    } 


    public void setWorkInfo(String[][] workInfo) { 
     this.workInfo = workInfo; 
    }   

} 

В контроллере весны я использую что-то вроде этого.

public ModelAndView addData(@RequestBody MyBean tempForm) throws Exception{ 

    ModelAndView model = new ModelAndView(new org.springframework.web.servlet.view.json.MappingJacksonJsonView()); 

    try{ 
     myService.addData(tempForm); 

     model.addObject("mesage", "success"); 
    } 
    catch(Exception e) 
    {   
     model.addObject("mesage", "error"); 
     log.error("error:"+e); 
    } 

    } 

Может кто-нибудь предложить, как я могу решить эту проблему.

ответ

0

Я решил эту проблему, проверив объект json своих 2D-массивов. Похоже, это было сочетание 1D-массива с другими значениями. В то время как на конце боба формы он ожидал 2D-массив, и Джексон думал, что это 1D-массив, но не смог его перевести.

ModelAndView model = new ModelAndView (новый org.springframework.web.servlet.view.json.MappingJacksonJsonView());

Имеет ли перевод, поэтому для большинства случаев вам не нужно добавлять аннотацию jackson в свой класс bean-компонента, если объект отправляется схожим с обеих сторон, например. В моем случае я отправлял 2D-массив javascript, и в моей форме bean я определил 2D-массив. Также убедитесь, что у вас есть тег формы в jsp или другой странице и т. Д.

2

Вы уверены, что ваш массив прямоугольного размера?

Вы должны быть в состоянии сделать это с помощью списка:

List<List<String>> workInfo; 

А затем преобразовать в String[][], если вы хотите.

Вы можете сделать:

ObjectMapper mapper = new ObjectMapper(); 
mapper.canSerialize(MyBean.class); 

Чтобы проверить, что он может сериализовать правильно.

+0

Спасибо за ваш ответ, я попробую это и дам вам знать. – Nomad

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