Saltar al contenido

Spring Boot: devuelve un JSON vacío en lugar de un cuerpo vacío cuando el objeto devuelto es nulo

Solución:

Primero, si está usando @RestController anotación no necesitas la @ResponseBody anotación, deshazte de eso.

En segundo lugar, si está tratando de tener un controlador REST, entonces le faltan algunas cosas, hágalo así:

@RequestMapping(value = "/sigla/{sigla}", method = RequestMethod.GET, consumes = "application/json", produces="application/json")
public ResponseEntity<PaisDTO> obterPorSigla(@PathVariable String sigla) {
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", "application/json");    
        PaisDTO paisDTO = service.obterPorSigla(sigla);
        if(paisDTO != null) return new ResponseEntity<>(paisDTO, headers, HttpStatus.OK);
        else return new ResponseEntity<>(headers, HttpStatus.OK); 
}

En el ejemplo anterior, si obtiene un valor nulo, devolverá una respuesta JSON vacía.

La única forma que pude encontrar fue crear una clase vacía

@JsonSerialize
public class EmptyJsonBody {
}

Luego agregue esto a su respuesta

@PostMapping(value = "/sigla/{sigla}")
public ResponseEntity obterPorSigla(@PathVariable String sigla) {
    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Type", "application/json");
    PaisDTO paisDTO = service.obterPorSigla(sigla);
    ResponseEntity.BodyBuilder responseBuilder = ResponseEntity.ok().headers(headers);
    if(paisDTO != null) {
        return responseBuilder.body(paisDTO);
    } else {
        return responseBuilder.body(new EmptyJsonBody());
    }
}

Solución 1: Tienes que implementar tu clase de entidad con Serializable Solución 2: Tu clase debe tener getter y setter En mi caso, el getter y setter recibieron modificadores de acceso protegido. así que los cambié a públicos y voló funcionó

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *