Spring Controller – Spring MVC控制器
Spring Controller注释是@Component注释的特化。
Spring Controller注释通常与基于RequestMapping注释的注释处理程序方法结合使用。
Spring 控制器
Spring Controller注释只能应用于类。
用于将一个类标记为网络请求处理程序。
它主要用于Spring MVC应用程序。
Spring RestController
Spring @RestController是一个便利注释,它本身使用@Controller和@ResponseBody进行了注释。
该注释用于将类标记为RESTful Web服务的请求处理程序。
Spring 控制器实例
让我们创建一个简单的spring应用程序,其中我们将实现标准MVC控制器以及REST控制器。
在Eclipse中创建一个"动态Web项目",然后将其转换为Maven项目。
这将为我们提供基于Maven的Web应用程序结构,我们可以在此基础上构建应用程序。
下图显示了我们的Spring MVC Controller应用程序的最终项目结构。
对于我们的应用程序,我们需要遵循以下依赖性。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.0.7.RELEASE</version> </dependency> <!-- Hymanson for REST --> <dependency> <groupId>com.fasterxml.Hymanson.core</groupId> <artifactId>Hymanson-databind</artifactId> <version>2.9.6</version> </dependency>
让我们看一下部署描述符(web.xml),其中我们将DispatcherServlet servlet配置为前端控制器。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee https://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>Spring-Controller</display-name> <!-- Add Spring MVC DispatcherServlet as front controller --> <servlet> <servlet-name>spring</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
最后,我们有以下Spring上下文文件。
其中我们将应用程序配置为基于注释,并提供用于扫描spring组件的根包。
我们还将配置InternalResourceViewResolver
bean并提供视图页面的详细信息。
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="https://www.springframework.org/schema/mvc" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:beans="https://www.springframework.org/schema/beans" xmlns:context="https://www.springframework.org/schema/context" xsi:schemaLocation="https://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- Enables the Spring MVC @Controller programming model --> <annotation-driven <context:component-scan base-package="com.theitroad.spring" <!-- Resolves views selected for rendering by @Controllers to JSP resources in the /WEB-INF/views directory --> <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <beans:property name="prefix" value="/WEB-INF/views/" <beans:property name="suffix" value=".jsp" </beans:bean> </beans:beans>
我们的配置XML文件已经准备好,让我们现在进入Controller类。
package com.theitroad.spring.controller; import java.text.DateFormat; import java.util.Date; import java.util.Locale; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/hello") public String home(Locale locale, Model model) { Date date = new Date(); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); String formattedDate = dateFormat.format(date); model.addAttribute("serverTime", formattedDate); return "home"; } }
我们定义了一个请求处理程序方法,该方法可以接受URI为"/hello"的GET请求,并返回" home.jsp"页面作为响应。
注意,我们正在为模型设置一个属性,该属性将在home.jsp页面中使用。
这是我们简单的" home.jsp"页面代码。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <title>Home</title> </head> <body> <h1>Hello world!</h1> <p>The time on the server is ${serverTime}.</p> </body> </html>
Spring MVC控制器测试
我们具有简单控制器的基于Servlet的常规Spring MVC应用程序已经准备就绪,只需将其导出为WAR文件并部署在Tomcat或者任何其他Servlet容器上即可。
然后转到URLhttps://localhost:8080/Spring-Controller/hello
,您应该看到以下屏幕作为输出。
Spring RestController示例
现在,让我们扩展应用程序以公开REST API。
创建一个将作为JSON响应发送的模型类。
package com.theitroad.spring.model; public class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
这是我们简单的REST Controller类。
package com.theitroad.spring.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.theitroad.spring.model.Person; @RestController public class PersonRESTController { @RequestMapping("/rest") public String healthCheck() { return "OK"; } @RequestMapping("/rest/person/get") public Person getPerson(@RequestParam(name = "name", required = false, defaultValue = "Unknown") String name) { Person person = new Person(); person.setName(name); return person; } }
再次重新部署应用程序以测试我们的REST API。
Spring REST控制器测试
转到URLhttps://localhost:8080/Spring-Controller/rest
,您将获得以下输出。
转到URLhttps://localhost:8080/Spring-Controller/rest/person/get
,您将获得以下JSON响应:
现在,我们在URL中提供name参数值,转到https://localhost:8080/Spring-Controller/rest/person/get?name = hyman
,您将获得JSON响应。