如何使用Jackson反序列化2D数组

时间:2013-09-17 16:48:55

标签: java arrays json spring spring-mvc

我将2D数组JSON传递给弹簧控制器,但是得到了jackson错误。

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

我的javascript 2D数组看起来像这样。

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

它像这样映射到2D数组的bean类。

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);
    }

    }

有人可以建议我如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

你确定你的阵列是矩形吗?

您应该可以使用列表执行此操作:

List<List<String>> workInfo;

然后根据需要转换为String[][]

你可以这样做:

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

测试它是否可以正确序列化。

答案 1 :(得分:0)

我通过检查2D数组的json对象解决了这个问题。它变成了一维数组与其他值的混合。在表单bean端,它期待一个2D数组,杰克逊认为它是一维数组,但无法翻译它。

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

是否进行了翻译,因此在大多数情况下,如果对象被发送方式类似,则不需要在表单bean类中添加jackson注释,例如:在我的情况下,我发送了一个javascript 2D数组,在我的表单bean中,我定义了一个2D数组。还要确保jsp或其他页面中有表格标签等。