diff --git a/application/module-exercise/src/main/java/org/fuseri/moduleexercise/exercise/ExerciseController.java b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/exercise/ExerciseController.java
new file mode 100644
index 0000000000000000000000000000000000000000..5700b3b7be30c488a8fd27cdc02f23113b1c93a4
--- /dev/null
+++ b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/exercise/ExerciseController.java
@@ -0,0 +1,70 @@
+package org.fuseri.moduleexercise.exercise;
+
+import org.fuseri.model.dto.common.Result;
+import org.fuseri.model.dto.exercise.ExerciseCreateDto;
+import org.fuseri.model.dto.exercise.ExerciseDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * Represent a REST API controller for exercises
+ * Handle HTTP requests related to exercises
+ */
+@RestController
+@RequestMapping("/exercises")
+public class ExerciseController {
+
+    private final ExerciseService service;
+
+    private final ExerciseMapper mapper;
+
+    /**
+     * Constructor for AnswerController
+     *
+     * @param service the service responsible for handling exercise-related logic
+     * @param mapper  the mapper responsible for converting between DTOs and entities
+     */
+    @Autowired
+    public ExerciseController(ExerciseService service, ExerciseMapper mapper) {
+        this.service = service;
+        this.mapper = mapper;
+    }
+
+    /**
+     * Create a new answer for the given question ID
+     *
+     * @param dto the ExerciseCreateDto object containing information about the exercise to create
+     * @return an ExerciseDto object representing the newly created exercise
+     */
+    @PostMapping
+    public ExerciseDto create(@RequestBody ExerciseCreateDto dto) {
+        Exercise withoutId = mapper.fromCreateDto(dto);
+        Exercise exercise = service.create(withoutId);
+        return mapper.toDto(exercise);
+    }
+
+    /**
+     * Find an exercise by ID
+     *
+     * @param id the ID of the exercise to find
+     * @return an ExerciseDto object representing the found exercise
+     */
+    @GetMapping("/{id}")
+    public ExerciseDto find(@PathVariable String id) {
+        return mapper.toDto(service.find(id));
+    }
+
+    /**
+     * Find exercises and return them in a paginated format
+     *
+     * @param page the page number of the exercises to retrieve
+     * @return a Result object containing a list of ExerciseDto objects and pagination information
+     */
+    @GetMapping
+    public Result<ExerciseDto> findAll(@RequestParam int page) {
+        Page<Exercise> exercise = service.findAll(page);
+        return mapper.toResult(exercise);
+    }
+
+}
\ No newline at end of file