입력 끝 잭슨 파서로 인해 매핑 할 콘텐츠가 없습니다.
이 응답을 서버에서 받고 있습니다. {"status":"true","msg":"success"}
Jackson 파서 라이브러리를 사용 하여이 json 문자열을 구문 분석하려고하는데 어떻게 든 매핑 예외에 직면하고 있습니다.
com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
at [Source: java.io.StringReader@421ea4c0; 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 클래스
@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;
}
}
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();
}
어떻게 작동했고 왜 작동했는지 모르십니까? :(하지만 작동했습니다
이 오류를 수정할 수 있습니다. 제 경우에는 문제가 클라이언트 측에있었습니다. 실수로 서버에 쓰는 스트림을 닫지 않았습니다. 나는 스트림을 닫았고 잘 작동했습니다. 오류조차도 서버가 입력 끝을 식별하지 못한 것처럼 들립니다.
OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
out.write(jsonstring.getBytes());
out.close() ; //This is what I did
I had a similar error today and the issue was the content-type header of the post request. Make sure the content type is what you expect. In my case a "multipart/form-data" content-type header was being sent to the API instead of "application/json".
In my case I was reading the stream in a jersey RequestEventListener I created on the server side to log the request body prior to the request being processed. I then realized that this probably resulted in the subsequent read to yield no string (which is what is passed over when the business logic is run). I verified that to be the case.
So if you are using streams to read the JSON string be careful of that.
For one, @JsonProperty("status")
and @JsonProperty("msg")
should only be there only when declaring the fields, not on the setters and geters.
In fact, the simplest way to parse this would be
@JsonAutoDetect //if you don't want to have getters and setters for each JsonProperty
public class StatusResponses {
@JsonProperty("status")
private String status;
@JsonProperty("msg")
private String message;
}
참고URL : https://stackoverflow.com/questions/26925058/no-content-to-map-due-to-end-of-input-jackson-parser
'IT Share you' 카테고리의 다른 글
RSpec 문서… 어디에 숨겨져 있습니까? (0) | 2020.12.05 |
---|---|
어떤 상황에서 Apache Spark 대신 Dask를 사용할 수 있습니까? (0) | 2020.12.05 |
변수의 전체 유형 결정 (0) | 2020.12.05 |
서비스는 터치 제스처 / 이벤트를 어떻게 수신 할 수 있습니까? (0) | 2020.12.05 |
SQL을 Linq 왼쪽 조인으로 변환 (0) | 2020.12.04 |