Boa tarde Pessoal.
Estou tendo problemas ao deserealizar objeto json com VRaptor4.
Fazendo alguns teste, percebe uma situação:
Estou usando curl so para teste o serviço, porem quando faço esta requisição ex:
curl -v -H “Content-Type: application/json” -d " {“id”:1,“descricao”:“Teste json”}"http://localhost:8080/meuProjeto/rest/salvarAnotacao
o erro ocorre mas se eu tirar os espaços dos caracteres o objeto json, por exemplo: na descrição eu junto o valor Teste json para Testejson o deserializer funciona sem problema algum.
Podem me ajudar se isso esta ocorrendo por alguma falhar minha ou se pode ser algum problema no VRaptor4?
Meu método:
@Post
@Consumes("application/json")
public void salvarAnotacao(Anotacao anotacao) {
System.out.println(anotacao.getDescricao());
result.nothing();
}
Class:
public class Anotacao {
@Id @GeneratedValue
private Long id;
private String descricao;
@ManyToOne
private Evento evento;
@ManyToOne
private Usuario usuario;
//gets/sets
}
@Entity
public class Usuario{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotEmpty
@NotNull
@Column(nullable = false, length = 150)
private String nome;
@NotEmpty
@NotNull
@Column(nullable = false, length = 100)
private String email;
@Column(length = 20)
private String telefone;
@Column(length = 50)
private String cargo;
@NotEmpty
@NotNull
@Column(nullable = false, unique = true, length = 20)
private String login;
@NotEmpty
@NotNull
@Column(nullable = false)
private String senha;
@Enumerated(EnumType.ORDINAL)
@Column(nullable = false)
private UsuarioPerfil perfil;
@ManyToOne
private Grupo grupo;
@OneToMany
private List<Evento> eventos;
//gets/sets
}
@Entity
public class Evento {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String title;
private Boolean allDay;
@Temporal(TemporalType.TIMESTAMP)
private Calendar start;
@Temporal(TemporalType.TIMESTAMP)
private Calendar end;
@Column(length = 10)
private String color;
private String url;
private Boolean compartilhar;
@ManyToOne
private Grupo grupo;
@ManyToOne(fetch = FetchType.EAGER)
private Usuario usuario;
@OneToMany(mappedBy = "evento", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Anotacao> anotacoes;
//gets/sets
}
Error:
mai 16, 2016 3:12:21 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [default] in context with path [/agenda-online] threw exception
br.com.caelum.vraptor.view.ResultException: Unable to deserialize data
at br.com.caelum.vraptor.serialization.gson.GsonDeserialization.deserialize(GsonDeserialization.java:153)
at br.com.caelum.vraptor.serialization.gson.GsonDeserialization$Proxy$_$$WeldClientProxy.deserialize(Unknown Source)
at br.com.caelum.vraptor.observer.DeserializingObserver.deserializes(DeserializingObserver.java:96)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)
at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)
at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)
at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.start(DefaultInterceptorStack.java:90)
at br.com.caelum.vraptor.core.DefaultInterceptorStack$Proxy$$$_WeldClientProxy.start(Unknown Source)
at br.com.caelum.vraptor.observer.RequestHandlerObserver.handle(RequestHandlerObserver.java:93)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)
at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)
at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)
at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at br.com.meta3.calendario.interceptor.CORSFilter.doFilter(CORSFilter.java:42)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: com.google.gson.JsonSyntaxException: java.io.EOFException: End of input at line 1 column 22
at com.google.gson.internal.Streams.parse(Streams.java:54)
at com.google.gson.JsonParser.parse(JsonParser.java:84)
at com.google.gson.JsonParser.parse(JsonParser.java:59)
at com.google.gson.JsonParser.parse(JsonParser.java:45)
at br.com.caelum.vraptor.serialization.gson.GsonDeserialization.deserialize(GsonDeserialization.java:108)
… 53 more
Caused by: java.io.EOFException: End of input at line 1 column 22
at com.google.gson.stream.JsonReader.nextNonWhitespace(JsonReader.java:1377)
at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:471)
at com.google.gson.stream.JsonReader.hasNext(JsonReader.java:403)
at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:666)
at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:642)
at com.google.gson.internal.Streams.parse(Streams.java:44)
… 57 more