🎮 Анатомия REST Controller: Входящие и Исходящие
Раньше, чтобы вернуть JSON, нужно было танцевать с бубном. В Spring Boot это делается "из коробки" благодаря библиотеке Jackson, которая тихо работает в фоне.
1️⃣
Это первый вопрос на собеседовании.
🔴
🔴
🔴 Это просто
🔴 Всё, что возвращает метод, автоматически превращается в JSON.
2️⃣ Принимаем данные (3 главных способа)
Как вытащить информацию из запроса?
А. Из пути URL (
Используем, когда параметр - это часть адреса ресурса.
🔴 URL:
🔴 Код:
Б. Из параметров запроса (
Используем для фильтрации, сортировки или опциональных параметров.
• URL:
• Код:
В. Из тела запроса (
Используем для отправки сложных объектов (обычно в POST/PUT запросах). Spring возьмет JSON и сам превратит его в Java-объект (DTO).
• JSON:
• Код:
3️⃣ Управляем ответом (
Просто вернуть объект
Для этого используем обертку
💻 Пример: Идеальный контроллер
⚡ Jackson Magic (Pro-Tip)
Иногда вам не нужно отдавать все поля объекта (например, пароль).
Не пишите код для скрытия! Используйте аннотации Jackson прямо в DTO:
•
•
🔥 Итог
• Используйте
•
•
•
• Возвращайте
#SpringBoot #REST #Controller #API #Java
📲 Мы в MAX
👉@BookJava
Раньше, чтобы вернуть JSON, нужно было танцевать с бубном. В Spring Boot это делается "из коробки" благодаря библиотеке Jackson, которая тихо работает в фоне.
1️⃣
@RestController vs @ControllerЭто первый вопрос на собеседовании.
@Controller: Олдскул. Используется, когда мы возвращаем HTML-страницы (Thymeleaf, JSP). Чтобы вернуть JSON, нужно над каждым методом вешать @ResponseBody.@RestController: Современный стандарт для REST API.@Controller + @ResponseBody над всеми методами.2️⃣ Принимаем данные (3 главных способа)
Как вытащить информацию из запроса?
А. Из пути URL (
@PathVariable)Используем, когда параметр - это часть адреса ресурса.
GET /users/42
@GetMapping("/users/{id}")
public User getById(@PathVariable Long id) { ... }
Б. Из параметров запроса (
@RequestParam)Используем для фильтрации, сортировки или опциональных параметров.
• URL:
GET /users?role=ADMIN&age=25• Код:
@GetMapping("/users")
public List<User> search(
@RequestParam String role,
@RequestParam(required = false) Integer age // Опционально
) { ... }
В. Из тела запроса (
@RequestBody)Используем для отправки сложных объектов (обычно в POST/PUT запросах). Spring возьмет JSON и сам превратит его в Java-объект (DTO).
• JSON:
{ "name": "Alex", "email": "a@b.com" }• Код:
@PostMapping("/users")
public User create(@RequestBody UserDto userDto) { ... }
3️⃣ Управляем ответом (
ResponseEntity)Просто вернуть объект
User, это хорошо (статус будет 200 OK). Но что, если мы хотим вернуть 404 (Not Found) или 201 (Created)?Для этого используем обертку
ResponseEntity<T>.💻 Пример: Идеальный контроллер
@RestController
@RequestMapping("/api/v1/users") // Общий префикс для всех методов
public class UserController {
private final UserService service; // Внедряем через конструктор
public UserController(UserService service) {
this.service = service;
}
// 1. Получить всех (GET 200 OK)
@GetMapping
public List<User> getAll() {
return service.findAll();
}
// 2. Найти одного (с управлением статусом)
@GetMapping("/{id}")
public ResponseEntity<User> getOne(@PathVariable Long id) {
return service.findById(id)
.map(user -> ResponseEntity.ok(user)) // 200 OK
.orElse(ResponseEntity.notFound().build()); // 404 Not Found
}
// 3. Создать (POST 201 Created)
@PostMapping
public ResponseEntity<User> create(@RequestBody UserDto dto) {
User created = service.save(dto);
return ResponseEntity.status(HttpStatus.CREATED).body(created);
}
}
⚡ Jackson Magic (Pro-Tip)
Иногда вам не нужно отдавать все поля объекта (например, пароль).
Не пишите код для скрытия! Используйте аннотации Jackson прямо в DTO:
•
@JsonIgnore - поле не попадет в JSON.•
@JsonProperty("full_name") - поле fullName в Java станет full_name в JSON.🔥 Итог
• Используйте
@RestController для API.•
@PathVariable - для ID (/users/1).•
@RequestParam - для фильтров (/users?sort=name).•
@RequestBody - для больших данных (JSON).• Возвращайте
ResponseEntity, чтобы контролировать HTTP-статусы.#SpringBoot #REST #Controller #API #Java
📲 Мы в MAX
👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1