Sobes.tech
Junior

Kuo skiriasi RestController ir Controller Spring?

sobes.tech AI

Atsakymas iš AI

@Controller žymi klasę kaip Spring MVC kontrolerį. Šis klasė dažniausiai grąžina vaizdų pavadinimus, kurie vėliau apdorojami vaizdų sprendėjų, kad būtų rodomas naudotojo sąsaja (pavyzdžiui, HTML puslapiai). @Controller dažnai naudojamas kuriant žiniatinklio programas su serverio pusės atvaizdavimu.

@RestController yra @Controller specializuota versija. Ji automatiškai prideda @ResponseBody prie kiekvieno metodo. Tai reiškia, kad @RestController metodai pagal numatytuosius nustatymus grąžina duomenis (pavyzdžiui, JSON arba XML), o ne vaizdų pavadinimus. @RestController yra idealus kuriant RESTful žiniatinklio paslaugas, kurios teikia duomenis klientams (pavyzdžiui, frontend programoms ar kitoms paslaugoms).

Pagrindinis skirtumas:

  • @Controller: grąžina vaizdų pavadinimus.
  • @RestController: grąžina duomenis (automatiškai prideda @ResponseBody).

@Controller pavyzdys:

@Controller
public class ViewController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, world!");
        return "helloView"; // Grąžina vaizdo pavadinimą
    }
}

@RestController pavyzdys:

@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; // Grąžina Map, kuris bus konvertuotas į JSON
    }
}