Kāda ir atšķirība starp RestController un Controller anotācijām Spring?
Atbilde no AI
sobes.tech AI
@Controller tiek izmantots, lai definētu kontrolierus, kas apstrādā tīmekļa pieprasījumus. Šāda klases metodes parasti atgriež skatus (view names), kurus Spring MVC pēc tam renderē.
@RestController ir specializēta @Controller versija. Tā apvieno @Controller un @ResponseBody. Tas nozīmē, ka šādas klases metodes pēc noklusējuma ne atgriež skatu nosaukumus, bet objektus, kas automātiski tiek serializēti uz JSON vai XML (atkarībā no konfigurācijas) un nosūtīti atpakaļ klientam HTTP atbildes ķermenī.
Galvenā atšķirība ir tā, ka @Controller ir paredzēts tradicionālo servera puses renderēšanas web lietojumprogrammu izveidei (MVC arhitektūra), bet @RestController — RESTful tīmekļa pakalpojumu izveidei, kur atbildes tiek attēlotas datu formātā.
Var teikt, ka @RestController ir sintaktisks cukurs @Controller un @ResponseBody kombinācijai.
// Piemērs ar @Controller
@Controller
@RequestMapping("/pages")
public class ViewController {
@GetMapping("/welcome")
public String showWelcomePage() {
return "welcome"; // Atgriež skata nosaukumu (welcome.html, welcome.jsp utt.)
}
}
// Piemērs ar @RestController
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
// Atgriež User objektu, kas automātiski tiek serializēts uz JSON/XML
return userService.findById(id);
}
}