简体   繁体   English

readEntity(Object.class) 无法从实体流中反序列化对象

[英]readEntity(Object.class) cannot deserializing object from entity stream

I have to get user from the data base.我必须从数据库中获取用户。 I'm using a microservice from String boot.我正在使用 String boot 中的微服务。 This is the code:这是代码:

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

I call it from the Servlet using this:我使用这个从 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);
        }
        ...
    }

But readEntity(Usuario.class) cannot deserializing object from entity stream and it throw this:但是 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)
...

Do you know where did I mistake?你知道我哪里弄错了吗? Thank you.谢谢你。

I finally resolve it.我终于解决了。 My problem was I didn't create empty constructors for the java objects.我的问题是我没有为 java 对象创建空的构造函数。 JSON use those for default. JSON 使用这些作为默认值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM