# Spring Boot Example with Camel REST DSL, Geocoder and Swagger

### Introduction

This example illustrates how to use https://projects.spring.io/spring-boot/[Spring Boot] with http://camel.apache.org[Camel]. It provides a simple REST service that is created with http://camel.apache.org/rest-dsl.html[Camel REST DSL], using  the http://camel.apache.org/geocoder.html[Geocoder component] and documented with http://swagger.io[Swagger].

The project uses the `camel-spring-boot-starter` and `camel-geocoder-starter` dependencies as Spring Boot starter dependencies for Camel that simplify the Maven configuration.

The project was based on it's `camel-example-spring-boot-rest-swagger` sibling.

### Build

You can build this example using:

    $ mvn package

### Run

You can run this example using:

    $ mvn spring-boot:run

You should see the following output when the application is launched:

----
[...]
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.0.RELEASE)
[...]
2018-03-30 16:28:56.354  INFO 29880 --- [           main] o.a.c.e.springboot.geocoder.Application  : Started Application in 4.806 seconds (JVM running for 5.435)
----

After the Spring Boot application is started, you can open the following URL in your web browser to access the REST endpoint and request the address for "Paris": http://localhost:8080/camel/geocoder/?address=Paris

You can also access the REST endpoint from the command line:

    $ curl http://localhost:8080/camel/geocoder/?address=Paris


The command will produce the following output:

----
{
  "status" : "OK",
  "results" : [ {
    "types" : [ "locality", "political" ],
    "formattedAddress" : "Paris, France",
    "addressComponents" : [ {
      "longName" : "Paris",
      "shortName" : "Paris",
      "types" : [ "locality", "political" ]
    }, {
      "longName" : "Paris",
      "shortName" : "Paris",
      "types" : [ "administrative_area_level_2", "political" ]
    }, {
      "longName" : "Île-de-France",
      "shortName" : "Île-de-France",
      "types" : [ "administrative_area_level_1", "political" ]
    }, {
      "longName" : "France",
      "shortName" : "FR",
      "types" : [ "country", "political" ]
    } ],
    "geometry" : {
      "location" : {
        "lat" : 48.856614,
        "lng" : 2.3522219
      },
      "locationType" : "APPROXIMATE",
      "viewport" : {
        "southwest" : {
          "lat" : 48.815573,
          "lng" : 2.225193
        },
        "northeast" : {
          "lat" : 48.9021449,
          "lng" : 2.4699208
        }
      },
      "bounds" : {
        "southwest" : {
          "lat" : 48.815573,
          "lng" : 2.224199
        },
        "northeast" : {
          "lat" : 48.9021449,
          "lng" : 2.4699208
        }
      }
    },
    "partialMatch" : false
  } ]
}
----

The Swagger documentation is located at: http://localhost:8080/camel/api-doc and can be retrieved with the following command:

    $ curl http://localhost:8080/camel/api-doc

The Spring Boot application can be stopped pressing `[CTRL]`+`[C]` in the shell.

### Help

If you hit any problems please let us know on the http://camel.apache.org/discussion-forums.html[Camel Forums].

Please help us make Apache Camel better - we appreciate any feedback you may have. Enjoy!

The Camel riders!
