我将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);
}
}
有人可以建议我如何解决这个问题。
答案 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或其他页面中有表格标签等。