Sobes.tech
Junior

Spring'da RestController va Controller o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

@Controller Spring MVC контролери сифатида классни белгилайди. Бу класс одатда кўрсатиш номларини қайтариб, улар кейин view резолверлар томонидан ишланиб, фойдаланувчи интерфейсини кўрсатиш учун ишлатилади (масалан, HTML саҳифалари). @Controller кўпинча серверда рендеринг билан веб дастурлар яратиш учун қўлланилади.

@RestController@Controllerнинг махсус тури. У автоматик равишда ҳар бир методга @ResponseBody аннотациясини қўшади. Бу дегани, @RestControllerдаги методлар одатда маълумотларни (масалан, JSON ёки XML) қайтариб, кўрсатиш номларини қайтармайди. @RestController RESTful веб хизматлар яратиш учун идеал, улар мижозларга (масалан, фронтенд дастурлар ёки бошқа хизматларга) маълумотлар тақдим этади.

Асосий фарқ:

  • @Controller: кўрсатиш номларини қайтариб:
  • @RestController: маълумотларни қайтариб (автоматик равишда @ResponseBody қўшилади).

@Controller намунаси:

@Controller
public class ViewController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, world!");
        return "helloView"; // кўрсатиш номини қайтариш
    }
}

@RestController намунаси:

@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; // JSONга айлантириладиган Map қайтарилади
    }
}