Sobes.tech
Junior

Ի՞նչ է տարբերությունը RestController և Controller-ի միջև Spring-ում։

sobes.tech AI

Պատասխան AI-ից

@Controller նշում է դասը որպես Spring MVC վերահսկիչ։ Այս դասը սովորաբար վերադարձնում է տեսքի անունները, որոնք ապա մշակվում են տեսքի լուծողներով՝ օգտագործողի ինտերֆեյսը ցուցադրելու համար (օրինակ՝ 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; // Map-ը կվերածվի JSON-ի
    }
}