es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No hay convertidor para [clase java.lang.String] con el tipo de contenido preestablecido de ‘text/plain’.

Estoy tratando de devolver una cadena formateada desde un punto de conexión con Spring, con el siguiente código:

private static class Json implements Serializable {
    private final String value;

    public Json(String value) {
        this.value = value;
    }

    public String getValue() {
        return this.value;
    }

    @Override
    public String toString() {
        return "Json{" +
                "value='" + value + '\'' +
                '}';
    }
}

@RequestMapping(value = "/description", method = RequestMethod.GET)
public HttpEntity<string> retrieveDescription() {

    String text = this.retrieveDescription();
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.TEXT_PLAIN);

    return new HttpEntity<string>(text, headers);
}

Pero cuando ejecuto la solicitud, obtengo el siguiente error:

No hay convertidor para la clase [java.lang.String] con el tipo de contenido predeterminado ‘text/plain’

He intentado devolver la clase Json pero aún tengo el mismo problema. ¿Alguna idea de cómo solucionarlo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema está en que el encabezado Content-Type se establece en TEXT_PLAIN, pero el tipo de retorno es un String. Spring no puede encontrar un convertidor para convertir el String a texto sin formato.

    Para resolver esto, puedes cambiar el tipo de retorno a Json y serializar el objeto a JSON o actualizar el encabezado Content-Type a un formato compatible como application/json.

    Aquí tienes un ejemplo de cómo devolver un objeto Json:

    private static class Json implements Serializable {
        private final String value;
    
        public Json(String value) {
            this.value = value;
        }
    
        public String getValue() {
            return this.value;
        }
    
        // añade getters y setters para cualquier otro campo
    
    }
    
    @RequestMapping(value = "/description", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<json> retrieveDescription() {
        Json json = new Json("Hola mundo"); // crea tu objeto Json aquí
    
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
    
        return new ResponseEntity<>(json, headers, HttpStatus.OK);
    }
    

    En este ejemplo, hemos cambiado el tipo de retorno a ResponseEntity y hemos establecido el encabezado Content-Type en application/json. El objeto Json se serializa a JSON y se devuelve en el cuerpo de la respuesta.

    ¡Espero que esto te ayude!

Comments are closed.