1

我将二维数组 JSON 传递给弹簧控制器,但出现杰克逊错误。

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

我的 javascript 二维数组看起来像这样。

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

像这样映射到二维数组的 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);
    }

    }

谁能建议我如何解决这个问题。

4

2 回答 2

2

你确定你的数组是矩形的吗?

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

List<List<String>> workInfo;

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

你可以做:

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

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

于 2013-09-17T16:59:34.133 回答
0

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

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

是否进行翻译,因此在大多数情况下,如果发送的对象在双方都相似,则不需要在表单 bean 类中添加杰克逊注释,例如在我的情况下,我发送了一个 javascript 2D 数组,并且在我的表单 bean 中我已经定义一个二维数组。还要确保您的 jsp 或其他页面等中有一个表单标签。

于 2013-09-19T23:39:26.610 回答