簡體   English   中英

readEntity(Object.class) 無法從實體流中反序列化對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM