[英]readEntity(Object.class) cannot deserializing object from entity stream
我必须从数据库中获取用户。 我正在使用 String boot 中的微服务。 这是代码:
@RequestMapping(value = "/obtener/{nombre}", method = RequestMethod.GET, produces = "application/json")
public ResponseEntity<?> ObtenerUsuario(@PathVariable(value = "nombre", required = true) String nombre) {
System.out.println("Acceso al microservicio: http://localhost:11708/obtener");
List<Usuario> usuarios = usuariosDAO.findByNombre(nombre);
if(usuarios.size()>1) {
System.out.println("ERROR: Varios usuarios tienen el mismo nombre");
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
if(!usuarios.isEmpty()) {
System.out.print("El nombre de usuario se ha encontrado");
return new ResponseEntity<>(usuarios.get(0), HttpStatus.FOUND);
}
System.out.println("El usuario no se ha encontrado");
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
我使用这个从 Servlet 调用它:
Client client = ClientBuilder.newClient();
WebTarget webResource = client.target("http://localhost:11708/obtener").path(nombre);
System.out.println("Llamada al microservicio: " + webResource.toString());
Invocation.Builder invocationBuilder = webResource.request(new String[] { "application/json" });
Response respuesta = invocationBuilder.get();
switch (respuesta.getStatus()) {
...
case 302: {
System.out.println("Nombre de usuario correcto");
Usuario usuario = respuesta.readEntity(Usuario.class);
}
...
}
但是 readEntity(Usuario.class) 不能从实体流中反序列化对象,它会抛出这个:
StandardWrapperValve[controlador.ServletController]: Servlet.service() for servlet controlador.ServletController threw exception
javax.ws.rs.ProcessingException: Error deserializing object from entity stream.
at org.glassfish.jersey.jsonb.internal.JsonBindingProvider.readFrom(JsonBindingProvider.java:101)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:257)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:236)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:156)
at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1091)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:874)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:808)
at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:321)
at org.glassfish.jersey.client.InboundJaxrsResponse$1.call(InboundJaxrsResponse.java:115)
...
你知道我哪里弄错了吗? 谢谢你。
我终于解决了。 我的问题是我没有为 java 对象创建空的构造函数。 JSON 使用这些作为默认值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.