在 Spring Boot @ResponseBody 教程中,我们将在控制器中使用 Spring @ResponseBody
注解将数据写入响应对象的主体。
Spring 是流行的 Java 应用框架,而 Spring Boot 是 Spring 的演进,可以帮助轻松地创建独立的,生产级的基于 Spring 的应用。
WebJars 是打包到 JAR 文件中的客户端 Web 库(例如 jQuery 或 Bootstrap)。 它们允许轻松管理 Java Web 应用中的客户端依赖性
JQuery 是一个流行的开源 JavaScript 库,旨在简化 HTML 的客户端脚本。
Spring @ResponseBody
@ResponseBody 是一个 Spring 注解,它将方法返回值绑定到 Web 响应主体。 它不解释为视图名称。 它使用 HTTP 消息转换器根据请求 HTTP 标头中的内容类型将返回值转换为 HTTP 响应主体。
Spring @ResponseBody
示例
以下示例创建一个 Spring Boot Web 应用,该应用将 JSON 数据返回到客户端。 主页是通过 MVC 机制处理的; FreeMarker 用于创建主页的模板。 主页包含一个按钮,该按钮发送获取 JSON 数据的请求。 Spring Boot Web 应用在@ResponseBody
注解的帮助下以 JSON 格式发送数据。
这是应用的项目结构。
pom.xml
在spring-boot-starter-freemarker
是建立使用 FreeMarker 的观点 Spring MVC 的 Web 应用的启动。 我们将 Webjar 用于 JQuery。 webjars-locator
自动解析任何 WebJars 资产的版本。 该应用打包到 JAR 文件中,并使用 Tomcat 作为嵌入式 Web 服务器。
com/zetcode/model/City.java
这是City
bean。 它具有id
,name
和population
属性。
com/zetcode/service/ICityService.java
ICityService
包含获取所有城市的合同方法。
com/zetcode/service/CityService.java
CityService
返回八个城市对象。
com/zetcode/controller/MyController.java
控制器有两种方法。 index()
方法返回主页视图。 findCities()
方法返回城市列表作为 JSON 数据。
@Controller
注解表示我们有一个控制器类。
index()
方法返回index
字符串,该字符串被解析为index.ftl
视图。 该视图位于src/main/resources/templates
目录中。 当 Spring 在 POM 文件中找到spring-boot-starter-freemarker
工件时,它将自动配置 FreeMarker。
对于GetCities
路径,将调用findCities()
方法。 produces
参数指示该方法返回 JSON 数据; Spring RequestResponseBodyMethodProcessor
通过使用HttpMessageConverter
写入响应主体来处理用@ResponseBody
注解的方法的返回值。 在我们的例子中,消息转换器是MappingJackson2HttpMessageConverter
,它使用杰克逊的 ObjectMapper 读取和写入 JSON。 (杰克逊是一个流行的 Java JSON 库。)
resources/templates/index.ftl
index.ftl
文件是主页的模板。 它包含一个按钮,该按钮对 Web 应用执行异步请求。 它将加载城市列表并将其写入 HTML 列表。
我们包括 JQuery 库。 多亏webjars-locator
,我们可以包括一个版本无关的 JQuery 库。 因此,如果 JQuery 的版本发生更改,我们不必更新链接。
通过$.getJSON()
方法,我们使用 HTTP GET 请求以 JSON 格式加载数据。 数据用$.each()
遍历并写入 HTML 列表。
在本教程中,我们在 Spring Boot Web 应用中使用了@ResponseBody
注解。