Muszę uzyskać użytkownika z bazy danych. Używam mikrovice z rozruchu ciągów. To jest kod:

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

Nazywam to z serwletu przy użyciu tego:

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

Ale czytelność (Usuario.Class) nie może deserializować obiektu z strumienia podmiotu i rzuca to:

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)
...

Czy wiesz, gdzie pomyliłem? Dziękuję Ci.

0
David Zarzoso Moreno 27 październik 2020, 16:15

1 odpowiedź

Najlepsza odpowiedź

W końcu to rozwiązuję. Moim problemem Czy nie stworzyłem pustych konstruktorów dla obiektów Java. JSON używa tych do domyślnych.

0
David Zarzoso Moreno 1 listopad 2020, 17:44