com.fasterxml.jackson.databind.JsonMappingException: No hay contenido para asignar debido al final de la entrada

Después de leer la respuesta, se consumen los datos de la respuesta. Si su código está en interceptor, puede intentar crear una respuesta nuevamente y regresar de la siguiente manera:

    Request request = chain.request();
    Response originalResponse = chain.proceed(request);
    final ResponseBody original = originalResponse.body();
    // if(request.url().toString().equalsIgnoreCase(string)){
    if (originalResponse.code() == HttpURLConnection.HTTP_OK) {
        try {
            String response = originalResponse.body().string();
            JSONObject mainObject = new JSONObject(response);

            // your mapping - manipulation code here.
            originalResponse = originalResponse.newBuilder()
                            .header("Cache-Control", "max-age=60")
                            .body(ResponseBody.create(original.contentType(),
                                    mainObject.toString().getBytes()))
                            .build();

        } catch (JSONException | IOException e) {
            e.printStackTrace();
        }
    }
    return originalResponse;

Aquí la respuesta se crea nuevamente y se devuelve.

Déjame saber cualquier actualización.

Respuesta 1

El uso de inputStream y bufferedReader parece incorrecto. Si ha creado un JsonParser para la entrada, probablemente sea mejor continuar usándolo para la asignación de objetos. Puede haber un problema con el lector almacenado en el búfer que lee con entusiasmo todo el contenido de la transmisión, sin dejar nada para que lea el analizador JSON.

También parece que falta una sección de su código, en la ifcondición.

Algo como esto:

    if (parser.isExpectedStartArrayToken()) {
        owners = mapper.readValue(parser, mapper.getTypeFactory().constructCollectionType(List.class, OwnerDetail.class));
    }

Notas adicionales:

  • Se recomienda no ajustar las secuencias en el almacenamiento en búfer / decodificación (InputStreamReader) antes de pasar a Jackson ya que los analizadores de Jackson ya han optimizado este proceso.
    • En realidad, envolver InputStreamReader en BufferedReader es prácticamente siempre redundante ya que InputStreamReader almacena el contenido del búfer
  • TypeFactory y JsonFactory se pueden obtener de una instancia de ObjectMapper
  • No es necesario inicializar a los propietarios en una lista vacía que se anulará de todos modos: declare sin inicialización y use un elsepara establecer el valor predeterminado solo cuando sea necesario
Respuesta: 2

Tengo un proyecto web que usa angular 2 en el front end y java spring 4 en el lado del servidor. Soy algo nuevo en angular 2. Quería usar angular universal para la pre-renderización. ¿Cómo puedo ...

¿Cómo afirmo que dos matrices de dobles contienen los mismos elementos? Existen métodos para afirmar que las matrices de enteros y otros tipos primitivos contienen los mismos elementos pero no para los dobles.

Intento seguir el tutorial de Introducción a los servicios web JAX-WS en el sitio netbeans. Creo la aplicación de servicio web (Java EE 6 Web, Tomcat 7.0), cuando agrego una clase de servicio web netbeans pide ...

Estoy tratando de depurar una aplicación Java remota desde Eclipse, con Eclipse actuando como el Servidor en lugar de actuar como un Cliente para la aplicación remota. Lanzo la aplicación remota con el ...