Ответ
В production-проектах рекомендуется использовать стандартизированную обертку (envelope) для всех ответов API. Это упрощает обработку на клиенте и обеспечивает единообразие.
Типичная структура ответа DTO:
public class ApiResponse<T> {
private String status; // "success", "error", "fail"
private T data; // Полезная нагрузка (может быть null)
private String message; // Сообщение для пользователя (опционально)
private int code; // HTTP-статус или кастомный код ошибки
// Конструкторы, геттеры, сеттеры
}
Пример использования в Spring REST Controller:
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
public ResponseEntity<ApiResponse<UserDto>> getUser(@PathVariable Long id) {
try {
UserDto user = userService.getUserById(id);
ApiResponse<UserDto> response = new ApiResponse<>(
"success", user, null, HttpStatus.OK.value()
);
return ResponseEntity.ok(response);
} catch (ResourceNotFoundException e) {
ApiResponse<UserDto> response = new ApiResponse<>(
"error", null, "User not found", HttpStatus.NOT_FOUND.value()
);
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response);
}
}
}
Преимущества такого подхода: предсказуемость, централизованная обработка ошибок и удобство для фронтенд-разработчиков.