当我尝试使用ObjectMapper将响应对象映射到VO对象时,我得到了java.lang.IllegalStateException:封闭的异常
代码:
*/
Request request = new Request.Builder().url(apiUrl).post(body)
.addHeader(CommunicationConstants.API_KEY, apiKey)
.addHeader(CommunicationConstants.EMAIL_CONTENT_TYPE, contentType).build();
Response response = client.newCall(request).execute();
ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
System.out.println("Error:"+response.body().string());
falconideRes = mapper.readValue(response.body().string(), FalconideResponseVO.class);
logger.info("Falconide Triggering call ends.");
公共类FalconideResponseVO {
@JsonProperty("error_info")
private ErrorInfo errorInfo;
@JsonProperty("message")
private String message;
@JsonProperty("message")
public String getMessage() {
return message;
}
@JsonProperty("message")
public void setMessage(String message) {
this.message = message;
}
/**
* @return the errorInfo
*/
@JsonProperty("error_info")
public ErrorInfo getErrorInfo() {
return errorInfo;
}
/**
* @param errorInfo the errorInfo to set
*/
@JsonProperty("error_info")
public void setErrorInfo(ErrorInfo errorInfo) {
this.errorInfo = errorInfo;
}
}
公共类ErrorInfo {
@JsonProperty("error_message")
private String errorMessage;
@JsonProperty("error_code")
private Integer errorCode;
@JsonProperty("error_message")
public String getErrorMessage() {
return errorMessage;
}
@JsonProperty("error_message")
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
@JsonProperty("error_code")
public Integer getErrorCode() {
return errorCode;
}
@JsonProperty("error_code")
public void setErrorCode(Integer errorCode) {
this.errorCode = errorCode;
}
}
{"error_info":{"error_message":"Parameter [subject] not passed in the api call","error_code":113},"message":"Payload_Error"}
需要将此映射到VO对象。但是,当我得到java.lang.IllegalStateException:关闭的异常
答案 0 :(得分:0)
您两次调用.string()
方法。我相信您只能执行一次,因为它是一个终止方法-因此是“封闭”异常。
更具体地说:
System.out.println("Error:"+response.body().string());
falconideRes = mapper.readValue(response.body().string(), FalconideResponseVO.class);
第二行的Stream
已关闭。如果要打印然后在mapper
的其他功能中使用,则应先提取变量,例如:
String variable = response.body().string();
System.out.println("Error:"+variable);
falconideRes = mapper.readValue(variable, FalconideResponseVO.class);