Sobes.tech
Junior

Mis vahe on RestController ja Controller Springis?

sobes.tech AI

Vastus AI-lt

@Controller märgib klassi kui Spring MVC kontroller. See klass tagastab tavaliselt vaadete nimed (view names), mida seejärel töötlevad vaadelahendajad (view resolvers) kasutajaliidese kuvamiseks (näiteks HTML-lehed). @Controller kasutatakse sageli serveripoolse renderdusega veebirakenduste loomisel.

@RestController on spetsialiseeritud versioon @Controller-st. See lisab automaatselt iga meetodi juurde annotatsiooni @ResponseBody. See tähendab, et @RestController meetodid tagastavad vaikimisi andmeid (näiteks JSON või XML), mitte vaadete nimesid. @RestController sobib ideaalselt RESTful veebiteenuste loomiseks, mis pakuvad andmeid klientidele (näiteks front-end rakendustele või teistele teenustele).

Peamine erinevus:

  • @Controller: Tagastab vaadete nimed.
  • @RestController: Tagastab andmeid (lisab automaatselt @ResponseBody).

Näide @Controller-st:

@Controller
public class ViewController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, world!");
        return "helloView"; // Tagastab vaate nime
    }
}

Näide @RestController-st:

@RestController
public class DataController {

    @GetMapping("/data")
    public Map<String, String> getData() {
        Map<String, String> response = new HashMap<>();
        response.put("status", "success");
        response.put("message", "Data retrieved");
        return response; // Tagastab Map, mis teisendatakse JSON-ks
    }
}