it-roy-ru.com

Нет содержимого для сопоставления из-за парсера Джексона в конце ввода

Я получаю этот ответ от сервера {"status":"true","msg":"success"}

Я пытаюсь проанализировать эту строку JSON с помощью библиотеки парсера Джексона, но каким-то образом я сталкиваюсь с заявлением об исключении сопоставления

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

Почему мы получаем такого рода исключения?

Как понять, что вызывает это исключение?

Я пытаюсь разобрать, используя следующий способ:

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 class

@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;
    }
}
52
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();
}

Не знаете, как это работает и почему это работает? :( но это сработало

18
Swapnil

Я мог бы исправить эту ошибку. В моем случае проблема была на стороне клиента. По ошибке я не закрыл поток, который я записывал на сервер. Я закрыл поток, и он работал нормально. Даже ошибка звучит так, как будто сервер не смог определить конец ввода.

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

У меня была похожая ошибка сегодня, и проблема заключалась в заголовке типа содержимого запроса на публикацию. Убедитесь, что тип контента соответствует ожидаемому. В моем случае заголовок типа содержимого "multipart/form-data" отправлялся в API вместо "application/json".

0
greatprogrammernumber500