commit 2677fe9d92a82d0e471e5c92acbc78c56af04c92
Author: 灰灰 <654612@qq.com>
Date: Wed Jan 28 14:59:48 2026 +0800
feat: 初始化旅游API项目并添加基础功能
- 添加Amadeus Java SDK依赖
- 实现酒店查询功能
- 添加.gitignore文件忽略IDE和构建文件
- 添加README文档说明项目功能
- 创建基础测试类
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..480bdf5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,39 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+.kotlin
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..b6b1ecf
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 已忽略包含查询文件的默认文件夹
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..aa00ffa
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..accd629
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/List of supported endpoints.txt b/List of supported endpoints.txt
new file mode 100644
index 0000000..f99b111
--- /dev/null
+++ b/List of supported endpoints.txt
@@ -0,0 +1,262 @@
+// Flight Inspiration Search
+FlightDestination[] flightDestinations = amadeus.shopping.flightDestinations.get(Params
+ .with("origin", "MAD"));
+
+// Flight Cheapest Date Search
+FlightDate[] flightDates = amadeus.shopping.flightDates.get(Params
+ .with("origin", "MAD")
+ .and("destination", "MUC"));
+
+// Flight Offers Search v2 GET
+FlightOfferSearch[] flightOffersSearches = amadeus.shopping.flightOffersSearch.get(
+ Params.with("originLocationCode", "SYD")
+ .and("destinationLocationCode", "BKK")
+ .and("departureDate", "2023-11-01")
+ .and("returnDate", "2023-11-08")
+ .and("adults", 2)
+ .and("max", 3));
+
+// Flight Offers Search v2 POST
+// body can be a String version of your JSON or a JsonObject
+FlightOfferSearch[] flightOffersSearches = amadeus.shopping.flightOffersSearch.post(body);
+
+// Flight Order Management
+// The flightOrderID comes from the Flight Create Orders (in test environment it's temporary)
+// Retrieve a flight order
+FlightOrder order = amadeus.booking.flightOrder("eJzTd9f3NjIJdzUGAAp%2fAiY=").get();
+// Cancel a flight order
+Response order = amadeus.booking.flightOrder("eJzTd9f3NjIJdzUGAAp%2fAiY=").delete();
+
+// Flight Offers price
+FlightPrice[] flightPricing = amadeus.shopping.flightOffersSearch.pricing.post(
+ body,
+ Params.with("include", "other-services")
+ .and("forceClass", "false"));
+
+// Flight Choice Prediction
+// Note that the example calls 2 APIs: Flight Offers Search & Flight Choice Prediction
+FlightOfferSearch[] flightOffers = amadeus.shopping.flightOffersSearch.get(
+ Params.with("originLocationCode", "NYC")
+ .and("destinationLocationCode", "MAD")
+ .and("departureDate", "2024-04-01")
+ .and("returnDate", "2024-04-08")
+ .and("adults", 1));
+
+// Using a JSonObject
+JsonObject result = flightOffers[0].getResponse().getResult();
+FlightOfferSearch[] flightOffersPrediction = amadeus.shopping.flightOffers.prediction.post(result);
+
+// Using a String
+String body = flightOffers[0].getResponse().getBody();
+FlightOfferSearch[] flightOffersPrediction = amadeus.shopping.flightOffers.prediction.post(body);
+
+// Flight Check-in Links
+CheckinLink[] checkinLinks = amadeus.referenceData.urls.checkinLinks.get(Params
+ .with("airlineCode", "BA"));
+
+// Airline Code LookUp
+Airline[] airlines = amadeus.referenceData.airlines.get(Params
+ .with("airlineCodes", "BA"));
+
+// Airport & City Search (autocomplete)
+// Find all the cities and airports starting by the keyword 'LON'
+Location[] locations = amadeus.referenceData.locations.get(Params
+ .with("keyword", "LON")
+ .and("subType", Locations.ANY));
+// Get a specific city or airport based on its id
+Location location = amadeus.referenceData
+ .location("ALHR").get();
+
+// Airport Nearest Relevant (for London)
+Location[] locations = amadeus.referenceData.locations.airports.get(Params
+ .with("latitude", 0.1278)
+ .and("longitude", 51.5074));
+
+// City Search
+City[] cities = amadeus.referenceData.locations.cities.get(Params
+ .with("keyword","PARIS"));
+
+// Flight Most Booked Destinations
+AirTraffic[] airTraffics = amadeus.travel.analytics.airTraffic.booked.get(Params
+ .with("originCityCode", "MAD")
+ .and("period", "2017-08"));
+
+// Flight Most Traveled Destinations
+AirTraffic[] airTraffics = amadeus.travel.analytics.airTraffic.traveled.get(Params
+ .with("originCityCode", "MAD")
+ .and("period", "2017-01"));
+
+// Flight Busiest Traveling Period
+Period[] busiestPeriods = amadeus.travel.analytics.airTraffic.busiestPeriod.get(Params
+ .with("cityCode", "MAD")
+ .and("period", "2017")
+ .and("direction", BusiestPeriod.ARRIVING));
+
+// Points of Interest
+// What are the popular places in Barcelona (based a geo location and a radius)
+PointOfInterest[] pointsOfInterest = amadeus.referenceData.locations.pointsOfInterest.get(Params
+ .with("latitude", "41.39715")
+ .and("longitude", "2.160873"));
+
+// What are the popular places in Barcelona? (based on a square)
+PointOfInterest[] pointsOfInterest = amadeus.referenceData.locations.pointsOfInterest.bySquare.get(Params
+ .with("north", "41.397158")
+ .and("west", "2.160873")
+ .and("south", "41.394582")
+ .and("east", "2.177181"));
+
+// Returns a single Point of Interest from a given id
+PointOfInterest pointOfInterest = amadeus.referenceData.locations.pointOfInterest("9CB40CB5D0").get();
+
+// Tours and Activities
+// What are the popular activities in Barcelona (based a geo location and a radius)
+Activity[] activities = amadeus.shopping.activities.get(Params
+ .with("latitude", "41.39715")
+ .and("longitude", "2.160873"));
+
+// What are the popular activities in Barcelona? (based on a square)
+Activity[] activities = amadeus.shopping.activities.bySquare.get(Params
+ .with("north", "41.397158")
+ .and("west", "2.160873")
+ .and("south", "41.394582")
+ .and("east", "2.177181"));
+
+// Returns a single activity from a given id
+Activity activity = amadeus.shopping.activity("4615").get();
+
+// What's the likelihood flights from this airport will leave on time?
+Prediction AirportOnTime = amadeus.airport.predictions.onTime.get(Params
+ .with("airportCode", "NCE")
+ .and("date", "2024-04-01"));
+
+// What's the likelihood of a given flight to be delayed?
+Prediction[] flightDelay = amadeus.travel.predictions.flightDelay.get(Params
+ .with("originLocationCode", "NCE")
+ .and("destinationLocationCode", "IST")
+ .and("departureDate", "2020-08-01")
+ .and("departureTime", "18:20:00")
+ .and("arrivalDate", "2020-08-01")
+ .and("arrivalTime", "22:15:00")
+ .and("aircraftCode", "321")
+ .and("carrierCode", "TK")
+ .and("flightNumber", "1816")
+ .and("duration", "PT31H10M"));
+
+// Flight Create Orders to book a flight
+// Using a JSonObject or String
+FlightOrder createdOrder = amadeus.booking.flightOrders.post(body);
+
+// Using a JsonObject for flight offer and Traveler[] as traveler information
+// see example at src/main/java/examples/flight/createorders/FlightCreateOrders.java
+FlightOrder createdOrder = amadeus.booking.flightOrders.post(flightOffersSearches, travelerArray);
+
+// What is the the seat map of a given flight?
+SeatMap[] seatmap = amadeus.shopping.seatMaps.get(Params
+ .with("flight-orderId", "eJzTd9f3NjIJdzUGAAp%2fAiY="));
+
+// What is the the seat map of a given flight?
+// The body can be a String version of your JSON or a JsonObject
+SeatMap[] seatmap = amadeus.shopping.seatMaps.post(body);
+
+// Trip Purpose Prediction
+Prediction tripPurpose = amadeus.travel.predictions.tripPurpose.get(Params
+ .with("originLocationCode", "NYC")
+ .and("destinationLocationCode", "MAD")
+ .and("departureDate", "2024-04-01")
+ .and("returnDate", "2024-04-08"));
+
+// Travel Recommendations
+Location destinations = amadeus.referenceData.recommendedLocations.get(Params
+ .with("cityCodes", "PAR")
+ .and("travelerCountryCode", "FR"));
+
+// On Demand Flight Status
+DatedFlight[] flightStatus = amadeus.schedule.flights.get(Params
+ .with("carrierCode", "AZ")
+ .and("flightNumber", "319")
+ .and("scheduledDepartureDate", "2024-03-13"));
+
+// Flight Price Analysis
+ItineraryPriceMetric[] metrics = amadeus.analytics.itineraryPriceMetrics.get(Params
+ .with("originIataCode", "MAD")
+ .and("destinationIataCode", "CDG")
+ .and("departureDate", "2024-03-21"));
+
+// Airport Routes
+Destination[] directDestinations = amadeus.airport.directDestinations.get(Params
+ .with("departureAirportCode","MAD")
+ .and("max","2"));
+
+// Flight Availabilites Search POST
+// body can be a String version of your JSON or a JsonObject
+FlightAvailability[] flightAvailabilities
+ = amadeus.shopping.availability.flightAvailabilities.post(body);
+
+
+// Location Score GET
+ScoredLocation[] scoredLocations
+ = amadeus.location.analytics.categoryRatedAreas.get(Params
+ .with("latitude", "41.397158")
+ .and("longitude", "2.160873"));
+
+// Branded Fares Upsell Post
+// body can be a String version of your JSON or a JsonObject
+FlightOfferSearch[] upsellFlightOffers
+ = amadeus.shopping.flightOffers.upselling.post(body);
+
+// Hotel List
+// Get list of hotels by hotel id
+Hotel[] hotels = amadeus.referenceData.locations.hotels.byHotels.get(Params
+ .with("hotelIds", "ADPAR001"));
+// Get list of hotels by city code
+Hotel[] hotels = amadeus.referenceData.locations.hotels.byCity.get(Params
+ .with("cityCode", "PAR"));
+// Get list of hotels by a geocode
+Hotel[] hotels = amadeus.referenceData.locations.hotels.byGeocode.get(Params
+ .with("longitude", 2.160873)
+ .and("latitude", 41.397158));
+
+// Hotel autocomplete names
+Hotel[] result = amadeus.referenceData.locations.hotel.get(Params
+ .with("keyword", "PARI")
+ .and("subType", "HOTEL_GDS")
+ .and("countryCode", "FR")
+ .and("lang", "EN")
+ .and("max", "20"));
+
+// Hotel Offers Search API v3
+// Get multiple hotel offers
+HotelOfferSearch[] offers = amadeus.shopping.hotelOffersSearch.get(Params
+ .with("hotelIds", "MCLONGHM")
+ .and("adults", 1)
+ .and("checkInDate", "2023-11-22")
+ .and("roomQuantity", 1)
+ .and("paymentPolicy", "NONE")
+ .and("bestRateOnly", true));
+// Get hotel offer pricing by offer id
+HotelOfferSearch offer = amadeus.shopping.hotelOfferSearch("QF3MNOBDQ8").get();
+
+// Hotel Booking
+// The body can be a String version of your JSON or a JsonObject
+HotelBooking[] hotel = amadeus.booking.hotelBookings.post(body);
+
+// Hotel Booking v2
+HotelOrder hotel = amadeus.booking.hotelOrders.post(body);
+
+// Hotel Ratings / Sentiments
+HotelSentiment[] hotelSentiments = amadeus.ereputation.hotelSentiments.get(Params.with("hotelIds", "ELONMFS,ADNYCCTB"));
+
+// Airline Routes
+// Get airline destinations
+Destination[] destinations = amadeus.airline.destinations.get(Params
+ .with("airlineCode", "BA")
+ .and("max", 2));
+
+// Transfer Search
+TransferOffersPost[] transfers = amadeus.shopping.transferOffers.post(body);
+
+// Transfer Booking
+TransferOrder transfers = amadeus.ordering.transferOrders.post(body, params);
+
+// Transfer Management
+TransferCancellation transfers = amadeus.ordering.transferOrder("123456").transfers.cancellation.post(params);
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b17ca5a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,297 @@
+# 旅游 API 项目
+
+本项目演示了如何使用 Amadeus 旅游 API 访问各种与旅游相关的端点。
+
+## 目录
+
+- [项目概述](#项目概述)
+- [支持的端点](#支持的端点)
+
+## 项目概述
+
+本项目提供了如何使用 Amadeus 旅游 API 执行各种与旅游相关操作的示例,例如搜索航班、酒店、景点等。
+
+### 参考地址:
+
+```
+https://github.com/amadeus4dev/amadeus-java
+```
+
+### 接口地址
+```
+https://developers.amadeus.com/self-service/apis-docs/guides/developer-guides/resources/hotels/
+```
+
+### 机场地址查询
+```
+https://www.iata.org/en/publications/directories/code-search/?airport.search=WUH
+```
+
+
+
+## 接口列表 参考github
+
+```java
+// Flight Inspiration Search
+FlightDestination[] flightDestinations = amadeus.shopping.flightDestinations.get(Params
+ .with("origin", "MAD"));
+
+// Flight Cheapest Date Search
+FlightDate[] flightDates = amadeus.shopping.flightDates.get(Params
+ .with("origin", "MAD")
+ .and("destination", "MUC"));
+
+// Flight Offers Search v2 GET
+FlightOfferSearch[] flightOffersSearches = amadeus.shopping.flightOffersSearch.get(
+ Params.with("originLocationCode", "SYD")
+ .and("destinationLocationCode", "BKK")
+ .and("departureDate", "2023-11-01")
+ .and("returnDate", "2023-11-08")
+ .and("adults", 2)
+ .and("max", 3));
+
+// Flight Offers Search v2 POST
+// body can be a String version of your JSON or a JsonObject
+FlightOfferSearch[] flightOffersSearches = amadeus.shopping.flightOffersSearch.post(body);
+
+// Flight Order Management
+// The flightOrderID comes from the Flight Create Orders (in test environment it's temporary)
+// Retrieve a flight order
+FlightOrder order = amadeus.booking.flightOrder("eJzTd9f3NjIJdzUGAAp%2fAiY=").get();
+// Cancel a flight order
+Response order = amadeus.booking.flightOrder("eJzTd9f3NjIJdzUGAAp%2fAiY=").delete();
+
+// Flight Offers price
+FlightPrice[] flightPricing = amadeus.shopping.flightOffersSearch.pricing.post(
+ body,
+ Params.with("include", "other-services")
+ .and("forceClass", "false"));
+
+// Flight Choice Prediction
+// Note that the example calls 2 APIs: Flight Offers Search & Flight Choice Prediction
+FlightOfferSearch[] flightOffers = amadeus.shopping.flightOffersSearch.get(
+ Params.with("originLocationCode", "NYC")
+ .and("destinationLocationCode", "MAD")
+ .and("departureDate", "2024-04-01")
+ .and("returnDate", "2024-04-08")
+ .and("adults", 1));
+
+// Using a JSonObject
+JsonObject result = flightOffers[0].getResponse().getResult();
+FlightOfferSearch[] flightOffersPrediction = amadeus.shopping.flightOffers.prediction.post(result);
+
+// Using a String
+String body = flightOffers[0].getResponse().getBody();
+FlightOfferSearch[] flightOffersPrediction = amadeus.shopping.flightOffers.prediction.post(body);
+
+// Flight Check-in Links
+CheckinLink[] checkinLinks = amadeus.referenceData.urls.checkinLinks.get(Params
+ .with("airlineCode", "BA"));
+
+// Airline Code LookUp
+Airline[] airlines = amadeus.referenceData.airlines.get(Params
+ .with("airlineCodes", "BA"));
+
+// Airport & City Search (autocomplete)
+// Find all the cities and airports starting by the keyword 'LON'
+Location[] locations = amadeus.referenceData.locations.get(Params
+ .with("keyword", "LON")
+ .and("subType", Locations.ANY));
+// Get a specific city or airport based on its id
+Location location = amadeus.referenceData
+ .location("ALHR").get();
+
+// Airport Nearest Relevant (for London)
+Location[] locations = amadeus.referenceData.locations.airports.get(Params
+ .with("latitude", 0.1278)
+ .and("longitude", 51.5074));
+
+// City Search
+City[] cities = amadeus.referenceData.locations.cities.get(Params
+ .with("keyword","PARIS"));
+
+// Flight Most Booked Destinations
+AirTraffic[] airTraffics = amadeus.travel.analytics.airTraffic.booked.get(Params
+ .with("originCityCode", "MAD")
+ .and("period", "2017-08"));
+
+// Flight Most Traveled Destinations
+AirTraffic[] airTraffics = amadeus.travel.analytics.airTraffic.traveled.get(Params
+ .with("originCityCode", "MAD")
+ .and("period", "2017-01"));
+
+// Flight Busiest Traveling Period
+Period[] busiestPeriods = amadeus.travel.analytics.airTraffic.busiestPeriod.get(Params
+ .with("cityCode", "MAD")
+ .and("period", "2017")
+ .and("direction", BusiestPeriod.ARRIVING));
+
+// Points of Interest
+// What are the popular places in Barcelona (based a geo location and a radius)
+PointOfInterest[] pointsOfInterest = amadeus.referenceData.locations.pointsOfInterest.get(Params
+ .with("latitude", "41.39715")
+ .and("longitude", "2.160873"));
+
+// What are the popular places in Barcelona? (based on a square)
+PointOfInterest[] pointsOfInterest = amadeus.referenceData.locations.pointsOfInterest.bySquare.get(Params
+ .with("north", "41.397158")
+ .and("west", "2.160873")
+ .and("south", "41.394582")
+ .and("east", "2.177181"));
+
+// Returns a single Point of Interest from a given id
+PointOfInterest pointOfInterest = amadeus.referenceData.locations.pointOfInterest("9CB40CB5D0").get();
+
+// Tours and Activities
+// What are the popular activities in Barcelona (based a geo location and a radius)
+Activity[] activities = amadeus.shopping.activities.get(Params
+ .with("latitude", "41.39715")
+ .and("longitude", "2.160873"));
+
+// What are the popular activities in Barcelona? (based on a square)
+Activity[] activities = amadeus.shopping.activities.bySquare.get(Params
+ .with("north", "41.397158")
+ .and("west", "2.160873")
+ .and("south", "41.394582")
+ .and("east", "2.177181"));
+
+// Returns a single activity from a given id
+Activity activity = amadeus.shopping.activity("4615").get();
+
+// What's the likelihood flights from this airport will leave on time?
+Prediction AirportOnTime = amadeus.airport.predictions.onTime.get(Params
+ .with("airportCode", "NCE")
+ .and("date", "2024-04-01"));
+
+// What's the likelihood of a given flight to be delayed?
+Prediction[] flightDelay = amadeus.travel.predictions.flightDelay.get(Params
+ .with("originLocationCode", "NCE")
+ .and("destinationLocationCode", "IST")
+ .and("departureDate", "2020-08-01")
+ .and("departureTime", "18:20:00")
+ .and("arrivalDate", "2020-08-01")
+ .and("arrivalTime", "22:15:00")
+ .and("aircraftCode", "321")
+ .and("carrierCode", "TK")
+ .and("flightNumber", "1816")
+ .and("duration", "PT31H10M"));
+
+// Flight Create Orders to book a flight
+// Using a JSonObject or String
+FlightOrder createdOrder = amadeus.booking.flightOrders.post(body);
+
+// Using a JsonObject for flight offer and Traveler[] as traveler information
+// see example at src/main/java/examples/flight/createorders/FlightCreateOrders.java
+FlightOrder createdOrder = amadeus.booking.flightOrders.post(flightOffersSearches, travelerArray);
+
+// What is the the seat map of a given flight?
+SeatMap[] seatmap = amadeus.shopping.seatMaps.get(Params
+ .with("flight-orderId", "eJzTd9f3NjIJdzUGAAp%2fAiY="));
+
+// What is the the seat map of a given flight?
+// The body can be a String version of your JSON or a JsonObject
+SeatMap[] seatmap = amadeus.shopping.seatMaps.post(body);
+
+// Trip Purpose Prediction
+Prediction tripPurpose = amadeus.travel.predictions.tripPurpose.get(Params
+ .with("originLocationCode", "NYC")
+ .and("destinationLocationCode", "MAD")
+ .and("departureDate", "2024-04-01")
+ .and("returnDate", "2024-04-08"));
+
+// Travel Recommendations
+Location destinations = amadeus.referenceData.recommendedLocations.get(Params
+ .with("cityCodes", "PAR")
+ .and("travelerCountryCode", "FR"));
+
+// On Demand Flight Status
+DatedFlight[] flightStatus = amadeus.schedule.flights.get(Params
+ .with("carrierCode", "AZ")
+ .and("flightNumber", "319")
+ .and("scheduledDepartureDate", "2024-03-13"));
+
+// Flight Price Analysis
+ItineraryPriceMetric[] metrics = amadeus.analytics.itineraryPriceMetrics.get(Params
+ .with("originIataCode", "MAD")
+ .and("destinationIataCode", "CDG")
+ .and("departureDate", "2024-03-21"));
+
+// Airport Routes
+Destination[] directDestinations = amadeus.airport.directDestinations.get(Params
+ .with("departureAirportCode","MAD")
+ .and("max","2"));
+
+// Flight Availabilites Search POST
+// body can be a String version of your JSON or a JsonObject
+FlightAvailability[] flightAvailabilities
+ = amadeus.shopping.availability.flightAvailabilities.post(body);
+
+
+// Location Score GET
+ScoredLocation[] scoredLocations
+ = amadeus.location.analytics.categoryRatedAreas.get(Params
+ .with("latitude", "41.397158")
+ .and("longitude", "2.160873"));
+
+// Branded Fares Upsell Post
+// body can be a String version of your JSON or a JsonObject
+FlightOfferSearch[] upsellFlightOffers
+ = amadeus.shopping.flightOffers.upselling.post(body);
+
+// Hotel List
+// Get list of hotels by hotel id
+Hotel[] hotels = amadeus.referenceData.locations.hotels.byHotels.get(Params
+ .with("hotelIds", "ADPAR001"));
+// Get list of hotels by city code
+Hotel[] hotels = amadeus.referenceData.locations.hotels.byCity.get(Params
+ .with("cityCode", "PAR"));
+// Get list of hotels by a geocode
+Hotel[] hotels = amadeus.referenceData.locations.hotels.byGeocode.get(Params
+ .with("longitude", 2.160873)
+ .and("latitude", 41.397158));
+
+// Hotel autocomplete names
+Hotel[] result = amadeus.referenceData.locations.hotel.get(Params
+ .with("keyword", "PARI")
+ .and("subType", "HOTEL_GDS")
+ .and("countryCode", "FR")
+ .and("lang", "EN")
+ .and("max", "20"));
+
+// Hotel Offers Search API v3
+// Get multiple hotel offers
+HotelOfferSearch[] offers = amadeus.shopping.hotelOffersSearch.get(Params
+ .with("hotelIds", "MCLONGHM")
+ .and("adults", 1)
+ .and("checkInDate", "2023-11-22")
+ .and("roomQuantity", 1)
+ .and("paymentPolicy", "NONE")
+ .and("bestRateOnly", true));
+// Get hotel offer pricing by offer id
+HotelOfferSearch offer = amadeus.shopping.hotelOfferSearch("QF3MNOBDQ8").get();
+
+// Hotel Booking
+// The body can be a String version of your JSON or a JsonObject
+HotelBooking[] hotel = amadeus.booking.hotelBookings.post(body);
+
+// Hotel Booking v2
+HotelOrder hotel = amadeus.booking.hotelOrders.post(body);
+
+// Hotel Ratings / Sentiments
+HotelSentiment[] hotelSentiments = amadeus.ereputation.hotelSentiments.get(Params.with("hotelIds", "ELONMFS,ADNYCCTB"));
+
+// Airline Routes
+// Get airline destinations
+Destination[] destinations = amadeus.airline.destinations.get(Params
+ .with("airlineCode", "BA")
+ .and("max", 2));
+
+// Transfer Search
+TransferOffersPost[] transfers = amadeus.shopping.transferOffers.post(body);
+
+// Transfer Booking
+TransferOrder transfers = amadeus.ordering.transferOrders.post(body, params);
+
+// Transfer Management
+TransferCancellation transfers = amadeus.ordering.transferOrder("123456").transfers.cancellation.post(params);
+```
diff --git a/debug.log b/debug.log
new file mode 100644
index 0000000..d6a3d47
--- /dev/null
+++ b/debug.log
@@ -0,0 +1,2 @@
+[33532:33536:0128/145139.894:INFO:electron\shell\app\electron_main_delegate.cc:543] #### AhaElectron (relauncher) Startup #### cmd: --no-sandbox
+[33532:33536:0128/145140.119:INFO:electron\shell\app\electron_main_delegate.cc:298] #### AhaElectron (relauncher) Shutdown ####
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..1448d5d
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,49 @@
+
+ 4.0.0
+
+ org.example
+ travel1
+ 1.0-SNAPSHOT
+ jar
+
+ travel1
+ http://maven.apache.org
+
+
+ UTF-8
+
+
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+
+
+ com.amadeus
+ amadeus-java
+ 10.0.0
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.32
+ provided
+
+
+
+
+ ch.qos.logback
+ logback-classic
+ 1.5.26
+ compile
+
+
+
+
+
diff --git a/src/main/java/org/example/App.java b/src/main/java/org/example/App.java
new file mode 100644
index 0000000..d1feafb
--- /dev/null
+++ b/src/main/java/org/example/App.java
@@ -0,0 +1,32 @@
+package org.example;
+
+import com.amadeus.Amadeus;
+import com.amadeus.Params;
+import com.amadeus.exceptions.ResponseException;
+import com.amadeus.resources.Hotel;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * Hello world!
+ *
+ */
+
+@Slf4j
+public class App
+{
+ public static void main( String[] args ) throws ResponseException {
+ System.out.println( "Hello World!" );
+
+ Amadeus amadeus = Amadeus
+ .builder("jDKskm2fvqyM0rh098G3rcSzKaJIK8ZF",
+ "rBZHbs2DGb0QznzU")
+ .build();
+
+ //
+ Params params = Params.with("cityCode", "WUH");
+ Hotel[] rs = amadeus.referenceData.locations.hotels.byCity.get(params);
+ log.info("rs:{}",rs);
+
+
+ }
+}
diff --git a/src/test/java/org/example/AppTest.java b/src/test/java/org/example/AppTest.java
new file mode 100644
index 0000000..d5f435d
--- /dev/null
+++ b/src/test/java/org/example/AppTest.java
@@ -0,0 +1,38 @@
+package org.example;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}