【问题标题】:spring mvc error post json array to controllerspring mvc错误将json数组发布到控制器
【发布时间】:2013-08-29 07:20:20
【问题描述】:

我有以下 ajax

 $.ajax({//jquery ajax
            data:{"images": [1,2,3]},                
            dataType:'json',
            type:"post",
            url:"${prefix}/testarray"
            ....
        });

================================================
形式与方法

    public class TestForm {
    private List<String> images=new ArrayList<String>();

    public List<String> getImages() {
        return images;
    }

    public void setImages(List<String> images) {
        this.images = images;
    }  

}

@RequestMapping(value = "/testarray", method = RequestMethod.POST)
public @ResponseBody int testForm(TestForm form){
    return form.getImages().size();
}

当发布数据时出现错误:

 java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:504)
    at java.lang.Integer.parseInt(Integer.java:527)
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:969)
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:902)
    at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:75)
    at org.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:740)
    at org.springframework.validation.DataBinder.doBind(DataBinder.java:636)
    at org.springframework.web.bind.WebDataBinder.doBind(WebDataBinder.java:191)
    at org.springframework.web.bind.ServletRequestDataBinder.bind(ServletRequestDataBinder.java:112)
    at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.bindRequestParameters(ServletModelAttributeMethodProcessor.java:153)
    at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:106)
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77)
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:123)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:920)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:827)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:158)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:801)
    at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:66)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:96)
    at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:168)
    at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:136)
    at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:134)

我知道 tradiotanal:true 在 ajax 但如何在 spring mvc 中接受以下参数?:

images[]    1
images[]    2
images[]    3

【问题讨论】:

  • 我认为当你有一个 ModelAttribute(例如你的例子中的 TestForm)时,如果不设置传统是不可能接受数组参数的:true 我认为这是 Spring MVC 中的一个错误。你用的是哪个版本?

标签: jquery json spring spring-mvc


【解决方案1】:

我已经查看了您的异常堆栈跟踪, 当您传递参数名称为“images”的字符串数组时,您正试图从 ajax 调用中获取 TestForm 对象。

所以按照下面的修改代码:

@RequestMapping(value = "/testarray", method = RequestMethod.POST)
public @ResponseBody int testForm(String[] images){

    TestForm form=null;
    if(images.length()!=0){
       form=new TestForm();
       form.setImages(Arrays.asList(images));
    }
    return form.getImages().size();
}

如果您仍然遇到问题,请告诉我

【讨论】:

  • 关于你的代码,如果 images.length() 到 images.length 和 @RequestParam(value="images[]") String[] 图像,它将起作用。感谢您的回答,但是关于 TestForm 我想得到这个表单数组如何将图像数组绑定到测试表单中的字段图像?
  • 例如,我有一个带有两个字段 String name 和 List images 的对象测试表单,在 ajax 中我发送以下内容:data:{"name":"cool","images":[ 1,2,3]}
  • 用“public @ResponseBody int testForm(@ModelAttribute TestForm form)”替换你的代码sn-p
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 2013-01-11
  • 2012-11-26
  • 2012-12-30
  • 1970-01-01
  • 2012-04-17
相关资源
最近更新 更多