Spring Boot Learning Cockpit

Use one workspace to understand MVC, validation, security, AOP, and application events.

This homepage is now a guided study cockpit. Instead of only linking to pages, it explains the request path, suggests experiment sequences, and lets you call real endpoints to observe how the demo behaves.

Core labs4
Major layers6
Interactive pages4
Tested backend paths2+
Start Here

Recommended study order

1. Learn endpoint binding

Hit the live API explorer below and compare query, path, header, cookie, and JSON body patterns.

2. Study users and validation

Open the user lab to inspect CRUD, duplicate email handling, and aggregate stats.

3. Watch cross-cutting behavior

Move to AOP and events to see timing, rate limiting, and listener history.

Architecture

How one request travels through the demo

BrowserForm submit or fetch call starts the request.
SecurityJWT demo routes decide whether the request is public or protected.
ControllerSpring binds params, body, headers, and cookies into method arguments.
ServiceBusiness rules run, such as duplicate email checks or stats calculation.
AOP / EventsCross-cutting timing or event listeners react without cluttering core logic.
ResponseStructured JSON or HTML returns to the page and becomes visible feedback.
Live Explorer

Call real endpoints without leaving the page

Use these controls to inspect real JSON responses while you read the code. This makes the project easier to connect to concrete behavior.

Endpoint output
Select an experiment above to load live output.
Experiment 1

Trace validation

Open the user lab, create a user, then repeat with the same email. Compare the frontend error with `DuplicateEmailException` and the global exception handler.

UserController UserService GlobalExceptionHandler
Experiment 2

Trace AOP timing

Load users and stats several times, then call `/aop/aop/stats`. Watch how controller and service methods accumulate timing and call count data.

PerformanceAspect @Around Cross-cutting
Experiment 3

Trace event decoupling

Publish CREATED and LOGIN events, then reload event history. This shows how the request can finish while listeners keep handling side effects.

Publisher Listener @Async