Estou tentando representar um java.util.List em JSON, para ser utilizado em transações ajax, porém estou sem sucesso por enquanto, alguém saberia me dizer qual o modo correto de representar isso?
Por exemplo, representar este List da classe:
public Class Exemplo
{
private List<String> listExemplo;
}
Estou fazendo exatamente deste modo, e não da certo…
OBS: Estou usando o front controller do Spring para receber os dados em JSON, e ele inclusive me lança uma exception ao enviar um JSON representando um List deste modo:
[color=red]SEVERE:Servlet.service()forservlet[springmvc]incontextwithpath[/Receitas]threwexception[Request processing failed; nested exception is java.lang.NumberFormatException: For input string: ""]withrootcausejava.lang.NumberFormatException:Forinputstring:""atjava.lang.NumberFormatException.forInputString(NumberFormatException.java:65)atjava.lang.Integer.parseInt(Integer.java:504)atjava.lang.Integer.parseInt(Integer.java:527)atorg.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:979)atorg.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:921)atorg.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:76)atorg.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:692)atorg.springframework.validation.DataBinder.doBind(DataBinder.java:588)atorg.springframework.web.bind.WebDataBinder.doBind(WebDataBinder.java:191)atorg.springframework.web.bind.ServletRequestDataBinder.bind(ServletRequestDataBinder.java:111)atorg.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.doBind(AnnotationMethodHandlerAdapter.java:757)atorg.springframework.web.bind.annotation.support.HandlerMethodInvoker.doBind(HandlerMethodInvoker.java:805)atorg.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:359)atorg.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)atorg.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)atorg.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)atorg.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)atorg.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)atorg.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669)atorg.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:585)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:641)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:722)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)atorg.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)atorg.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)atorg.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)atorg.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)atorg.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)atjava.lang.Thread.run(Thread.java:722)[/color]
W
windsofhell
Ola,
eu acho que o problema esta na deserializacao da lista (JSON) que vc enviar do cliente, para a List no servidor.
Primeira coisa, da uma olhada se vc esta enviando os dados corretamente.
Se estiver enviando corretamente, eu sugiro vc usar uma biblioteca tipo o GSON http://code.google.com/p/google-gson/
Aqui tem um exemplo, este fazendo mais ou menos o que vc quer fazer:
//Daniel
guilherme.dio
Daniel, orbigado pela atenção !
Então, acredito que esteja tudo correto no envio dos dados, estou enviando via Ajax pelo JQuery por metodo POST:
Engraçado, que adicionei um Interceptor de teste para ver os dados antes de chegar no meu controller, e eles chegam corretamente em um Map que o String monta como parametros em um HttpServletRequest.
guilherme.dio
Alguém ?
guilherme.dio
Não consigo entender porque exceptions são causadas, sendo que meu JSON esta correto…
Agora estou tentando algo diferente para ver se da erro, estou tentando enviar um JSON para o Spring construir uma classe com atributos compostos: