购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1.4 控制器注解

Spring MVC中用于定义控制器的注解有@Controller和@RestController,两者都用于声明某个类为Web层的控制器,但它们在功能上有明显差异。

当使用@Controller注解时,控制器类中的方法通常返回一个字符串,代表逻辑视图的名称。这个视图名将被解析为一个实际的视图,如一个JSP、Thymeleaf或FreeMarker模板。

如果想从@Controller注解的类中的方法返回数据,而不是视图,则可以在该方法上使用@ResponseBody注解。这样,返回的数据会被直接写入HTTP响应体,通常用于返回JSON或XML格式的数据。

@Controller示例代码如下。

    @Controller
    public class WebController {
 
        @GetMapping("/page")
        public String getPage() {
            // 返回index视图(例如: index.jsp 或 index.html)
            return "index";
        }
        @GetMapping("/data")
        @ResponseBody
        public List<String> getData() {
        // 直接返回书籍列表
            return Arrays.asList("The Great Gatsby", "Moby Dick", "War and Peace");
        }
    }

这段代码定义了名为WebController的控制器类,该控制器有两个处理方法,分别处理两种不同的HTTP GET请求。

@GetMapping("/page"):此注解将getPage方法与/page路径的HTTP GET请求相关联。该方法返回一个字符串,代表视图名称。在这个示例中,它返回index,这意味着请求将被解析并展示为名为index的视图。

@GetMapping("/data"):此注解将getData方法与/data路径的HTTP GET请求相关联。由于该方法上额外添加了@ResponseBody注解,其返回值将直接写入HTTP响应体中,而不是被解析为视图名称。因此,它将返回一个包含三本书名的JSON数组。

@RestController是@Controller和@ResponseBody注解的结合体。它标记一个类为控制器,且类中的每个方法默认返回数据而非视图。使用@RestController的控制器方法直接将返回值写入HTTP响应体,无须在每个方法上单独添加@ResponseBody。

@RestController示例代码如下。

    @RestController
    public class ApiController {
        @GetMapping("/data")
        public List<String> getData() {
        // 直接返回书籍列表
            return Arrays.asList("The Great Gatsby", "Moby Dick", "War and
    Peace");
        }
    }

需要注意的是,当@Controller用于返回视图(如JSP、Thymeleaf、FreeMarker等)时,通常表示前端和后端逻辑在同一个项目或应用中。这种架构常被称为“单体应用”或“传统的Web应用”。在这种情况下,前后端并不是完全分离的。

在前后端分离的架构中,后端通常只提供数据接口,如RESTful API,使用@RestController来返回数据而不是视图;前端则是一个独立的应用,如使用Vue.js、React、Angular等框架构建的SPA(单页应用)。 toAfwyOP9yPuIzZ+iZtkg/o9UrQIAWvhFBbRMQF1zcKPq8NkQeLGQvbQRgBIAs4V

点击中间区域
呼出菜单
上一章
目录
下一章
×