JSON映射出现问题

时间:2018-10-24 12:48:10

标签: java jackson

当我尝试使用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:关闭的异常

1 个答案:

答案 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);