在 Postman 中發出一個回傳 json 回應正文的請求,但在我運行代碼時只回傳 200。我很確定我用來反序列化 Jackson 的類結構正確,并且請求的 json 正文似乎是有效的。我錯過了什么?
這是發出請求的類:
import ...
@Service
public class CPService {
@Value("${cp.url}")
private String cpUrl;
@Autowired
private ObjectMapper objectMapper;
public ResponseData send(String caseId, String pId, String documentId) throws IOException {
String version = "1.0";
Request request = Request.builder()
.requestData(RequestData.builder()
.version(version)
.transactionId(caseId)
.credPublish(CredPublish.builder()
.refId(pId)
.reportDocumentId(documentId)
.build())
.build())
.build();
HttpPost httpPost = new HttpPost(cpUrl);
EntityBuilder builder = createBuilder();
builder.setContentType(ContentType.APPLICATION_JSON);
builder.setText(objectMapper.writeValueAsString(request));
httpPost.setEntity(builder.build());
try (CloseableHttpClient httpClient = createHttpClient()) {
CloseableHttpResponse response = httpClient.execute(httpPost);
ResponseData responseData = objectMapper.readValue(response.getEntity().getContent(), ResponseData.class);
return responseData;
}
}
EntityBuilder createBuilder() {
return EntityBuilder.create();
}
CloseableHttpClient createHttpClient() {
return HttpClients.createDefault();
}
}
以下是使用的類:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Data
@Getter
@Setter
@JsonIgnoreProperties(ignoreUnknown = true)
public class ResponseData {
private Integer resultCount;
private String version;
private CredPublishResponse credPublish;
private String transactionId;
private List<ErrorMessage> errors;
}
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
@Data
@Getter
@Setter
public class CredPublishResponse {
private String responseMessage;
}
以下是 Postman 的回應示例:
{
"responseData": {
"resultCount": 1,
"version": "",
"credPublish": {
"responseMessage": "success"
},
"transactionId": "CASE-1234567"
}
}
uj5u.com熱心網友回復:
發生這種情況是因為您發布的 json 回應不是ResponseData物件表示,而是ResponseData在“responseData”屬性中包含物件表示;通常,轉換嘗試將以帶有適當例外的錯誤結束,但@JsonIgnoreProperties(ignoreUnknown = true)類上的注釋會阻止錯誤報告,然后獲得的物件僅包含空欄位。
為了避免這種行為,您可以在“responseData”屬性位置讀取您的 json 作為JsonNode物件并將其轉換為ResponseData如下物件:
JsonNode root = mapper.readTree(response.getEntity().getContent());
ResponseData responseData = mapper.treeToValue(root.at("/responseData"), ResponseData.class);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/481397.html
