我在 Postman 上有一個收件服務。我可以通過 Postman 成功獲得回復。該服務的主體和標頭有點復雜。我想使用 Resttemplate 從 SpringBoot 呼叫此服務。但是我收到了標題中提到的錯誤。我可能在請求串列的某個地方出錯或發送了錯誤的資料型別,但我不知道,我已經嘗試了很長時間。我希望你能幫助我。首先, 我將與 Postman 分享我發布請求的原始正文:
{
"currency": "EUR",
"customer_country": "NL",
"customer_language": "en",
"partner_metadata": {
"sales_channel": "inPath",
"device":"app"
},
"request": [
{
"policy_type": "comprehensive_travel_insurance",
"policy_type_version": "7",
"is_return": false,
"policy_start_date": "2022-06-07T10:22:30.925568 01:00",
"policy_end_date": "2022-06-13T20:55:00 02:00",
"departure_country": "LT",
"destination_country": "EE",
"total_tickets_price": 78.99,
"number_of_adults": 1,
"number_of_children": 0,
"number_of_infants": 0,
"trip_start_date": "2022-06-13T19:45:00 02:00",
"trip_end_date": "2022-06-13T20:55:00 02:00",
"flights": [
{
"legs": [
{
"departure_datetime": "2022-06-13T19:45:00 02:00",
"arrival_datetime": "2022-06-13T20:55:00 02:00",
"flight_number": "BT905",
"marketing_airline_iata_code": "BT",
"operating_airline_iata_code": "BT",
"departure_airport": "VNO",
"arrival_airport": "TLL",
"departure_country": "LT",
"arrival_country": "EE"
}
],
"departure_datetime": "2022-06-13T19:45:00 02:00",
"arrival_datetime": "2022-06-13T20:55:00 02:00",
"departure_country": "LT",
"arrival_country": "EE",
"departure_city": "VNO",
"arrival_city": "TLL"
}
]
}
]
}
郵遞員的標題:

我呼叫服務的示例端點:
@ResponseBody
@GetMapping("/abc")
public ResponseEntity<String> postQuotes(){
final String quoteURL = "https://api.xcover.com/x/partners/DCEPN/quotes/";
final HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("X-Api-Key", "5c6a8279bbcee600012561bbf7526e4a1e284c229ae8d22aa512f59f");
headers.add("Date", "Thu, 02 Jun 2022 22:16:39 GMT");
String signatureKeyID = "Signature keyId=\"5c6a8279bbcee600012561bbf7526e4a1e284c229ae8d22aa512f59f\",";
String algoritm = "algorithm=\"hmac-sha1\",";
String signature = "signature=\"zWt0aXNfqzatjxHIbIt+H7iTxLo=\"";
String authHeader = signatureKeyID.concat(algoritm).concat(signature);
headers.add("Authorization", authHeader);
HttpEntity<QuoteRequest> entity = new HttpEntity<>(fillQuoteRequest(), headers);
ResponseEntity<String> postForEntity = rest.postForEntity(quoteURL, entity, String.class);
return postForEntity;
}
我設定物體物件的方法:
private Legs fillLegs(){
Legs legs = new Legs();
legs.setDepartureDatetime("2022-06-13T19:45:00 02:00");
legs.setArrivalDatetime("2022-06-13T20:55:00 02:00");
legs.setFlightNumber("BT905");
legs.setOperatingAirlineIataCode("BT905");
legs.setMarketingAirlineIataCode("BT905");
legs.setDepartureAirport("VNO");
legs.setArrivalAirport("TLL");
legs.setArrivalCountry("LT");
legs.setDepartureCountry("EE");
return legs;
}
private Flights fillFlights(){
Flights flights = new Flights();
List<Legs> legsList = new ArrayList<>();
legsList.add(fillLegs());
flights.setLegs(legsList);
flights.setDepartureDateTime("2022-06-13T19:45:00 02:00");
flights.setArrivalDateTime("2022-06-13T19:45:00 02:00");
flights.setDepartureCountry("LT");
flights.setArrivalCountry("EE");
flights.setDepartureCity("VNO");
flights.setArrivalCity("TLL");
return flights;
}
private QRequest fillQrequest(){
QRequest qRequest = new QRequest();
List<Flights> flightsList = new ArrayList<>();
flightsList.add(fillFlights());
qRequest.setFlights(flightsList);
qRequest.setPolicyType("comprehensive_travel_insurance");
qRequest.setPolicyTypeVersion("7");
qRequest.setIsReturn(false);
qRequest.setPolicyStartDate("2022-06-07T10:22:30.925568 01:00");
qRequest.setPolicyEndDate("2022-06-13T20:55:00 02:00");
qRequest.setDepartureCountry("LT");
qRequest.setDestinationCountry("EE");
qRequest.setTotalTicketsPrice(78.99f);
qRequest.setNumberOfAdults(1);
qRequest.setNumberOfChildren(0);
qRequest.setNumberOfInfants(0);
qRequest.setTripStartDate("2022-06-13T19:45:00 02:00");
qRequest.setTripEndDate("2022-06-13T20:55:00 02:00");
return qRequest;
}
private PartnerMetadata fillPartnerMeta(){
PartnerMetadata pm = new PartnerMetadata();
pm.setDevice("app");
pm.setSalesChannel("inPath");
return pm;
}
private QuoteRequest fillQuoteRequest(){
QuoteRequest qr = new QuoteRequest();
qr.setRequest(fillQrequest());
qr.setPartnerMetadata(fillPartnerMeta());
qr.setCurrency("EUR");
qr.setCustomerCountry("NL");
qr.setCustomerLanguage("en");
return qr;
}
結果,當我呼叫服務時回傳錯誤:

org.springframework.web.client.HttpClientErrorException$UnprocessableEntity: 422 Unprocessable Entity: "{"type":"validation_error","message":"An API error occurred.","errors":{"request":["Expected a list of items but got type \"dict\"."]}}"
你能幫我找到錯誤的根源嗎?
uj5u.com熱心網友回復:
據我所見flights,legs應該作為串列發送,但您將它們作為物件發送。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/490377.html
