Start here. This is the direct spoken answer to practice first.
Overview
The application describes what failed; the web adapter decides how that outcome appears over HTTP.
The service layer returns or throws meaningful application outcomes without constructing ResponseEntity. The controller or global advice maps those outcomes to HTTP: missing resources may become 404, state conflicts 409, structurally invalid requests 400, and successful creation 201 with a location when appropriate. The mapping is explicit because the same application operation may later be called from messaging or a job. Error bodies use stable application codes in addition to status.