2013-08-29 62 views
0

我具有以下AJAX彈簧MVC錯誤交JSON數組到控制器

$.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) 

我知道關於tradiotanan:真的在阿賈克斯,但如何接受Spring MVC中?:

images[] 1 
images[] 2 
images[] 3 
+0

我認爲這是不可能的接受數組參數而不設置傳統:true 我認爲這是Spring MVC中的一個錯誤。你正在使用哪個版本? –

+0

[將JSON數組傳遞給Spring MVC控制器]可能的重複(http://stackoverflow.com/questions/21834180/passing-in-json-array-to-spring-mvc-controller) –

回答

0

我已通過您的異常堆棧跟蹤不見了, 您嘗試,而你是通過String數組,帶有PARAM NAME採取TESTFORM對象從AJAX調用下面的參數「圖片」。

所以按照以下修改代碼:

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

而讓當你(在你的例子如TESTFORM)擁有的ModelAttribute我知道,如果你面對問題仍然

+0

關於您的代碼,它將是如果將images.length()映射到images.length和@RequestParam(value =「images []」)String []圖像。謝謝你的答案,但關於TestForm我想獲得這種形式的數組如何將圖像數組綁定到testform中的字段圖像? – user2542304

+0

例如我有對象testform與字段字符串名稱和列表圖像和在ajax我發送以下內容:數據:{「名稱」:「酷」,「圖像」:[1,2,3]} – user2542304

+0

替換您的代碼片段與「公共@ResponseBody int testForm(@ModelAttribute TestForm窗體)」 – Ashish