Zestawy rozmówBlog

Twoja wymarzona praca? Lets Git IT.
Interaktywna platforma przygotowująca do rozmów technicznych dla nowoczesnych programistów.

XGitHub

Platforma

  • Kategorie

Zasoby

  • Blog
  • O aplikacji
  • FAQ
  • Sugestie

Prawne

  • Polityka prywatności
  • Regulamin

© 2026 LetsGit.IT. Wszelkie prawa zastrzeżone.

LetsGit.IT/Kategorie/Spring
Springeasy

`@RestController` vs `@Controller` — co się zmienia?

Tagi
#restcontroller#controller#spring-mvc
Wróć do kategoriiPrzejdź do quizu

Odpowiedź

`@RestController` to w praktyce `@Controller` + `@ResponseBody`, więc metody zwracają bezpośrednio body odpowiedzi (często JSON). `@Controller` zwykle służy do widoków/template’ów renderowanych po stronie serwera.

Odpowiedź zaawansowana

Głębiej

`@Controller` to kontroler MVC. Domyślnie metoda zwracająca `String` jest traktowana jako **nazwa widoku** i renderowana przez view resolver (Thymeleaf, JSP itd.).

`@RestController` dodaje `@ResponseBody` do każdej metody, czyli:

  • wynik trafia do body odpowiedzi,
  • message converters (np. Jackson) serializują obiekty do JSON,
  • content negotiation wybiera format odpowiedzi.

Praktyka

  • `@RestController` do API zwracającego DTO.
  • `@Controller` do stron renderowanych na serwerze.
  • Jeśli mieszasz, bądź jawny: `@ResponseBody` / `ResponseEntity`.

Przykłady

JSON:

@RestController
class UserApi {
  @GetMapping("/users/{id}")
  UserDto get(@PathVariable long id) { /* ... */ }
}

Widok:

@Controller
class PageController {
  @GetMapping("/login")
  String loginPage() { return "login"; }
}

Powiązane pytania

Spring
`@RestController` vs `@Controller`: jaka jest różnica?
#spring#mvc#controller
Spring
`@RequestParam` vs `@PathVariable` — kiedy czego użyć?
#spring-mvc#requestparam#pathvariable
Typowe pułapki
  • Zwrócenie `String` z `@Controller` i oczekiwanie JSON (to będzie nazwa widoku).
  • Brak `ResponseEntity`, gdy potrzebujesz kontrolować status/headers.
  • Wystawianie encji persystencji zamiast jawnych DTO.