调用Amadeus航班报价定价API返回400错误:type needed
解决Amadeus航班报价定价API调用400 "type needed"错误
问题核心
Postman调用API时,请求体包含"type": "flight-offer"字段可成功执行,但Java代码中传递的FlightOfferSearch对象序列化后缺失该字段,导致API返回400错误提示"type needed"。
解决方案
1. 确保自定义FlightOfferSearch类包含type字段
如果你使用的是自定义实体类,必须添加type字段并默认赋值为"flight-offer",保证序列化时该字段被包含:
public class FlightOfferSearch { // 原有字段... private String type = "flight-offer"; // 按需提供getter/setter public String getType() { return type; } public void setType(String type) { this.type = type; } }
同时检查Gson序列化配置,确保该字段未被@Exclude等注解排除;若字段名映射异常,可添加@SerializedName("type")注解强制匹配:
@SerializedName("type") private String type = "flight-offer";
2. 使用SDK内置对象构建器(推荐)
如果使用Amadeus Java SDK提供的FlightOfferSearch类,建议用SDK自带的构建器创建对象,避免手动设置字段遗漏:
FlightOfferSearch offer = FlightOfferSearch.builder() .type("flight-offer") .id("1") .source("GDS") // 依次设置其他必填字段(如itineraries、price等) .build();
3. 验证序列化后的请求体
在代码中添加日志,输出序列化后的JSON内容,对比Postman的请求体确认type字段存在:
Gson gson = new Gson(); String serializedBody = gson.toJson(offer); System.out.println("请求体内容:" + serializedBody);
若输出的JSON中无type字段,需调整实体类的序列化规则或字段定义。
额外排查点
- 确认Amadeus Java SDK 6.2.0版本与测试环境API的兼容性,核对官方文档的请求结构要求。
- 检查Spring MVC的
@RequestBody是否正确将前端传入的JSON反序列化为FlightOfferSearch对象,确保原始请求体包含type字段。
内容的提问来源于stack exchange,提问作者Steve Donovan
相关产品推荐
相关产品推荐

