This backend version of the Spring Petclinic application only provides a REST API. There is no UI. The spring-petclinic-angular project is a Angular front-end application which consumes the REST API.
See the presentation of the Spring Petclinic Framework version
git clone https://github.com/spring-petclinic/spring-petclinic-rest.git
cd spring-petclinic-rest
./mvnw spring-boot:rundocker run -p 9966:9966 springcommunity/spring-petclinic-restYou can then access petclinic here: http://localhost:9966/petclinic/
There is an actuator health check route as well:
This project provides a RESTful API for managing a veterinary clinic's owners, pets, veterinarians, visits, and specialties.
Swagger UI is available at: http://localhost:9966/petclinic/swagger-ui.html.
API documentation (OAS 3.1) is accessible at: http://localhost:9966/petclinic/v3/api-docs.
| Method | Endpoint | Description |
|---|---|---|
| Owners | ||
| GET | /api/owners |
Retrieve all pet owners |
| GET | /api/owners/{ownerId} |
Get a pet owner by ID |
| POST | /api/owners |
Add a new pet owner |
| PUT | /api/owners/{ownerId} |
Update an owner’s details |
| DELETE | /api/owners/{ownerId} |
Delete an owner |
| GET | /api/owners/{ownerId}/pets/{petId} |
Get a pet by ID (owner’s pet) |
| PUT | /api/owners/{ownerId}/pets/{petId} |
Update pet details (owner’s pet) |
| POST | /api/owners/{ownerId}/pets |
Add a new pet to an owner |
| POST | /api/owners/{ownerId}/pets/{petId}/visits |
Add a vet visit for a pet |
| Pets | ||
| GET | /api/pets |
Retrieve all pets |
| GET | /api/pets/{petId} |
Get a pet by ID |
| PUT | /api/pets/{petId} |
Update pet details |
| DELETE | /api/pets/{petId} |
Delete a pet |
| Vets | ||
| GET | /api/vets |
Retrieve all veterinarians |
| GET | /api/vets/{vetId} |
Get a vet by ID |
| POST | /api/vets |
Add a new vet |
| PUT | /api/vets/{vetId} |
Update vet details |
| DELETE | /api/vets/{vetId} |
Delete a vet |
| Pet Types | ||
| GET | /api/pettypes |
Retrieve all pet types |
| GET | /api/pettypes/{petTypeId} |
Get a pet type by ID |
| POST | /api/pettypes |
Add a new pet type |
| PUT | /api/pettypes/{petTypeId} |
Update pet type details |
| DELETE | /api/pettypes/{petTypeId} |
Delete a pet type |
| Specialties | ||
| GET | /api/specialties |
Retrieve all vet specialties |
| GET | /api/specialties/{specialtyId} |
Get a specialty by ID |
| POST | /api/specialties |
Add a new specialty |
| PUT | /api/specialties/{specialtyId} |
Update a specialty |
| DELETE | /api/specialties/{specialtyId} |
Delete a specialty |
| Visits | ||
| GET | /api/visits |
Retrieve all vet visits |
| GET | /api/visits/{visitId} |
Get a visit by ID |
| POST | /api/visits |
Add a new visit |
| PUT | /api/visits/{visitId} |
Update a visit |
| DELETE | /api/visits/{visitId} |
Delete a visit |
| Users | ||
| POST | /api/users |
Create a new user |
See its repository here: https://github.com/spring-petclinic/spring-petclinic-angular
Our issue tracker is available here: https://github.com/spring-petclinic/spring-petclinic-rest/issues
By default, Petclinic uses an in-memory H2 database, which is automatically populated with sample data at startup.
Petclinic supports the following databases:
- H2 (Default, In-Memory)
- HSQLDB (Alternative In-Memory Option)
- MySQL (Persistent)
- PostgreSQL (Persistent)
You can change the database by updating the spring.profiles.active property in application.properties:
| Database | Profile Configuration |
|---|---|
| H2 (Default) | spring.profiles.active=h2,spring-data-jpa |
| HSQLDB (Alternative In-Memory) | spring.profiles.active=hsqldb,spring-data-jpa |
| MySQL (Persistent) | spring.profiles.active=mysql,spring-data-jpa |
| PostgreSQL (Persistent) | spring.profiles.active=postgres,spring-data-jpa |
For more details, see the Spring Boot documentation.
- No additional setup is required.
- The database schema and sample data are loaded automatically from
src/main/resources/db/h2/. - You can access the H2 Console to inspect the database.
- Run the application:
mvn spring-boot:run
- Open H2 Console in your browser:
- URL: http://localhost:9966/petclinic/h2-console
- JDBC URL:
jdbc:h2:mem:petclinic - Username:
sa - Password: (leave blank)
-
HSQLDB works similarly to H2 as an in-memory database.
-
No additional setup is required—schema and sample data are loaded automatically from
src/main/resources/db/hsqldb/. -
Swtich to HSQLDB by modifying
application.properties:spring.profiles.active=hsqldb,spring-data-jpa
Modify application.properties:
spring.profiles.active=mysql,spring-data-jpaStart a MySQL database using Docker:
docker run -e MYSQL_USER=petclinic -e MYSQL_PASSWORD=petclinic -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=petclinic -p 3306:3306 mysql:8.4Modify application.properties:
spring.profiles.active=postgres,spring-data-jpaStart a PostgreSQL database using Docker:
docker run -e POSTGRES_USER=petclinic -e POSTGRES_PASSWORD=petclinic -e POSTGRES_DB=petclinic -p 5432:5432 postgres:16.3Instead of manually running containers, you can also use docker-compose.yml:
docker-compose --profile mysql up
docker-compose --profile postgres upThis API is built following some API First approach principles.
It is specified through the OpenAPI. It is specified in this file.
Some of the required classes are generated during the build time. Here are the generated file types:
- DTOs
- API template interfaces specifying methods to override in the controllers
To see how to get them generated you can read the next chapter.
Some of the required classes are generated during the build time using maven or any IDE (e.g., IntelliJ Idea or Eclipse).
All of these classes are generated into the target/generated-sources folder.
Here is a list of the generated packages and the corresponding tooling:
| Package name | Tool |
|---|---|
| org.springframework.samples.petclinic.mapper | MapStruct |
| org.springframework.samples.petclinic.rest.dto | OpenAPI Generator maven plugin |
To get both, you have to run the following command:
mvn clean install
In its default configuration, Petclinic doesn't have authentication and authorization enabled.
In order to use the basic authentication functionality, turn in on from the application.properties file
petclinic.security.enable=trueThis will secure all APIs and in order to access them, basic authentication is required. Apart from authentication, APIs also require authorization. This is done via roles that a user can have. The existing roles are listed below with the corresponding permissions
OWNER_ADMIN->OwnerController,PetController,PetTypeController(getAllPetTypesandgetPetType),VisitControllerVET_ADMIN->PetTypeController,SpecialityController,VetControllerADMIN->UserController
There is an existing user with the username admin and password admin that has access to all APIs.
In order to add a new user, please make POST /api/users request with the following payload:
{
"username": "secondAdmin",
"password": "password",
"enabled": true,
"roles": [
{ "name" : "OWNER_ADMIN" }
]
}The following items should be installed in your system:
- Maven 3 (https://maven.apache.org/install.html)
- git command line tool (https://help.github.com/articles/set-up-git)
- Eclipse with the m2e plugin (m2e is installed by default when using the STS (http://www.springsource.org/sts) distribution of Eclipse)
Note: when m2e is available, there is an m2 icon in Help -> About dialog. If m2e is not there, just follow the install process here: http://eclipse.org/m2e/download/
- Eclipse with the mapstruct plugin installed.
- In the command line
git clone https://github.com/spring-petclinic/spring-petclinic-rest.git- Inside Eclipse
File -> Import -> Maven -> Existing Maven project
| Layer | Source |
|---|---|
| REST API controllers | REST folder |
| Service | ClinicServiceImpl.java |
| JDBC | jdbc folder |
| JPA | jpa folder |
| Spring Data JPA | springdatajpa folder |
| Tests | AbstractClinicServiceTests.java |