Start here. This is the direct spoken answer to practice first.
Overview
Choose the return type based on whether the endpoint controls more than the body.
In a @RestController, returning a DTO directly lets Spring serialize it with the normal successful status. I return ResponseEntity<T> when the endpoint needs to choose status or headers, such as 201 with Location, conditional caching headers, or a result that may be 200 or 404. A no-content response can use ResponseEntity<Void>. I do not wrap every fixed 200 response merely because the type exists.