Return Object JSON en Java

publicado por: Anonymous

Tengo una capa repository en mi aplicación Java que tiene un método para devolver todos los autores:

public Stream<Author> getAllAuthors() {
    return StreamSupport.stream(authorRepository.findAll().spliterator(), true);  
}

Y tengo otra capa controller que funciona como Endpoint que llama a este método para ver todos los autores a traves de la URL:

 @ResponseStatus(HttpStatus.OK) 
 @RequestMapping(value = "/authors", method = RequestMethod.GET, produces =  MediaType.APPLICATION_JSON_VALUE) 
 public Stream<Author> sampleExampleGet() throws IOException {
     return this.authorsManager.getAllAuthors(); 
 }

Necesito devolver un objeto JSON con los autores pero la respuesta que me da es la siguiente:

{
  "parallel": true
}

He importado las siguientes dependencias para transformar objetos a JSON

<dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20180130</version>
</dependency>

El problema que en el Endpoint no se como devolver un JSON.

solución

Mi consejo es que transformes el Stream a una List:

@ResponseStatus(HttpStatus.OK) 
@RequestMapping(value = "/authors", method = RequestMethod.GET,
    produces =  MediaType.APPLICATION_JSON_VALUE) 
public List<Author> sampleExampleGet() throws IOException {
     return this.authorsManager.getAllAuthors().collect(Collectors.toList()); 
}

De hecho, yo modificaría el método (¿del Service?) para que no cree el Stream:

public List<Author> getAllAuthors() {
    return authorRepository.findAll();
}

Y devolvería directamente ese resultado.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *