== Spring Boot Example with Camel REST DSL and OpenApi

=== 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] and documented with http://swagger.io/[OpenApi]. Additionally, it provides a https://swagger.io/[Swagger] UI, through https://springdoc.org/[Springdoc], to easily interact with your REST API.

The project uses the `camel-spring-boot-starter` dependency, a Spring Boot starter dependency for Camel that simplifies the Maven configuration. 

The project also uses `camel-servlet` component as the HTTP transport component for Camel REST DSL.

=== Build

You can build this example using:

    $ mvn package

=== Run

You can run this example using:

    $ mvn spring-boot:run

After the Spring Boot application is started, you can open the following URL in your web browser to access the REST endpoint and retrieve a list of users: http://localhost:8080/api/users

To use the Swagger UI, open http://localhost:8080/swagger-ui.html

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

[source,text]
----
$ curl http://localhost:8080/api/users
----

The command will produce the following output:

[source,json]
----
[ {
  "id" : 1,
  "name" : "John Coltrane"
}, {
  "id" : 2,
  "name" : "Miles Davis"
}, {
  "id" : 3,
  "name" : "Sonny Rollins"
} ]
----

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

[source,text]
----
$ curl http://localhost:8080/api/api-doc
----

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

=== Help and contributions

If you hit any problem using Camel or have some feedback, then please
https://camel.apache.org/community/support/[let us know].

We also love contributors, so
https://camel.apache.org/community/contributing/[get involved] :-)

The Camel riders!
