web-dev-qa-db-de.com

Aufgrund des Jackson-Parsers am Ende der Eingabe ist kein Inhalt zuzuordnen

Ich erhalte diese Antwort vom Server {"status":"true","msg":"success"}

Ich versuche, diese Json-Zeichenfolge mit der Jackson-Parser-Bibliothek zu analysieren, aber irgendwie sehe ich mich mit einer Mapping-Ausnahme konfrontiert

com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
 at [Source: [email protected]; line: 1, column: 1]

Warum gibt es solche Ausnahmen?

Wie kann man verstehen, was diese Ausnahme verursacht?

Ich versuche auf folgende Weise zu analysieren:

StatusResponses loginValidator = null;

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(Feature.AUTO_CLOSE_SOURCE, true);

try {
    String res = result.getResponseAsString();//{"status":"true","msg":"success"}
    loginValidator = objectMapper.readValue(result.getResponseAsString(), StatusResponses.class);
} catch (Exception e) {
    e.printStackTrace();
}

StatusResponse-Klasse

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({ "status","msg" })
public class StatusResponses {

    @JsonProperty("status")
    public String getStatus() {
        return status;
    }

    @JsonProperty("status")
    public void setStatus(String status) {
        this.status = status;
    }

    @JsonProperty("msg")
    public String getMessage() {
        return message;
    }

    @JsonProperty("msg")
    public void setMessage(String message) {
        this.message = message;
    }

    @JsonProperty("status")
    private String status;

    @JsonProperty("msg")
    private String message;

    private Map<String, Object> additionalProperties = new HashMap<String, Object>();

    @JsonGetter
    public Map<String, Object> getAdditionalProperties() {
        return additionalProperties;
    }

    @JsonSetter
    public void setAdditionalProperties(Map<String, Object> additionalProperties) {
        this.additionalProperties = additionalProperties;
    }
}
58
Swapnil
import com.fasterxml.jackson.core.JsonParser.Feature;
import com.fasterxml.jackson.databind.ObjectMapper;

StatusResponses loginValidator = null;

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(Feature.AUTO_CLOSE_SOURCE, true);

try {
    String res = result.getResponseAsString();//{"status":"true","msg":"success"}
    loginValidator = objectMapper.readValue(res, StatusResponses.class);//replaced result.getResponseAsString() with res
} catch (Exception e) {
    e.printStackTrace();
}

Sie wissen nicht, wie es funktioniert hat und warum es funktioniert hat? :( aber es hat funktioniert

21
Swapnil

Ich konnte diesen Fehler beheben. In meinem Fall lag das Problem beim Kunden. Aus Versehen habe ich den Stream, den ich auf den Server geschrieben habe, nicht geschlossen. Ich habe den Stream geschlossen und es hat gut funktioniert. Selbst der Fehler hört sich so an, als ob der Server das Ende der Eingabe nicht identifizieren konnte.

OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
out.write(jsonstring.getBytes());
out.close() ; //This is what I did
5
Amol

In meinem Fall habe ich den Stream in einem von mir auf der Serverseite erstellten RequestEventListener gelesen, um den Anforderungshauptteil zu protokollieren, bevor die Anforderung verarbeitet wurde. Dann wurde mir klar, dass dies wahrscheinlich dazu führte, dass der nachfolgende Lesevorgang keine Zeichenfolge ergab (was beim Ausführen der Geschäftslogik übergangen wird). Ich habe das bestätigt.

Wenn Sie also Streams zum Lesen der JSON-Zeichenfolge verwenden, achten Sie darauf.

0
Omar Abdel Bari

Ich hatte heute einen ähnlichen Fehler und das Problem war der inhaltliche Header der Post-Anfrage. Stellen Sie sicher, dass der Inhaltstyp Ihren Erwartungen entspricht. In meinem Fall wurde anstelle von "application/json" ein Content-Type-Header "multipart/form-data" an die API gesendet.