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
    }
}