<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Spring Boot `@ResponseBody`教程 > 原文: [http://zetcode.com/springboot/responsebody/](http://zetcode.com/springboot/responsebody/) 在 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 格式發送數據。 ```java pom.xml src ├── main │ ├── java │ │ └── com │ │ └── zetcode │ │ ├── Application.java │ │ ├── model │ │ │ └── City.java │ │ ├── controller │ │ │ └── MyController.java │ │ └── service │ │ ├── CityService.java │ │ └── ICityService.java │ └── resources │ └── templates │ └── index.ftl └── test └── java ``` 這是應用的項目結構。 `pom.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zetcode</groupId> <artifactId>springbootresponsebodyex</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>3.3.1</version> </dependency> <dependency> <groupId>org.webjars</groupId> <artifactId>webjars-locator</artifactId> <version>0.34</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> ``` 在`spring-boot-starter-freemarker`是建立使用 FreeMarker 的觀點 Spring MVC 的 Web 應用的啟動。 我們將 Webjar 用于 JQuery。 `webjars-locator`自動解析任何 WebJars 資產的版本。 該應用打包到 JAR 文件中,并使用 Tomcat 作為嵌入式 Web 服務器。 `com/zetcode/model/City.java` ```java package com.zetcode.model; import java.util.Objects; public class City { private Long id; private String name; private int population; public City() { } public City(Long id, String name, int population) { this.id = id; this.name = name; this.population = population; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPopulation() { return population; } public void setPopulation(int population) { this.population = population; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; City city = (City) o; return population == city.population && Objects.equals(id, city.id) && Objects.equals(name, city.name); } @Override public int hashCode() { return Objects.hash(id, name, population); } @Override public String toString() { final StringBuilder sb = new StringBuilder("City{"); sb.append("id=").append(id); sb.append(", name='").append(name).append('\''); sb.append(", population=").append(population); sb.append('}'); return sb.toString(); } } ``` 這是`City` bean。 它具有`id`,`name`和`population`屬性。 `com/zetcode/service/ICityService.java` ```java package com.zetcode.service; import com.zetcode.model.City; import java.util.List; public interface ICityService { List<City> findAll(); } ``` `ICityService`包含獲取所有城市的契約方法。 `com/zetcode/service/CityService.java` ```java package com.zetcode.service; import com.zetcode.model.City; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Service public class CityService implements ICityService { @Override public List<City> findAll() { var cities = new ArrayList<City>(); cities.add(new City(1L, "Bratislava", 432000)); cities.add(new City(2L, "Budapest", 1759000)); cities.add(new City(3L, "Prague", 1280000)); cities.add(new City(4L, "Warsaw", 1748000)); cities.add(new City(5L, "Los Angeles", 3971000)); cities.add(new City(6L, "New York", 8550000)); cities.add(new City(7L, "Edinburgh", 464000)); cities.add(new City(8L, "Berlin", 3671000)); return cities; } } ``` `CityService`返回八個城市對象。 `com/zetcode/controller/MyController.java` ```java package com.zetcode.controller; import com.zetcode.bean.City; import com.zetcode.service.ICityService; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class MyController { @Autowired ICityService cityService; @RequestMapping(path = "/") public String index() { return "index"; } @RequestMapping(path = "/GetCities", produces = "application/json; charset=UTF-8") @ResponseBody public List<City> findCities() { var cities = (List<City>) cityService.findAll(); return cities; } } ``` 控制器有兩種方法。 `index()`方法返回主頁視圖。 `findCities()`方法返回城市列表作為 JSON 數據。 ```java @Controller public class MyController { ``` `@Controller`注解表示我們有一個控制器類。 ```java @RequestMapping(path = "/") public String index() { return "index"; } ``` `index()`方法返回`index`字符串,該字符串被解析為`index.ftl`視圖。 該視圖位于`src/main/resources/templates`目錄中。 當 Spring 在 POM 文件中找到`spring-boot-starter-freemarker`工件時,它將自動配置 FreeMarker。 ```java @RequestMapping(path = "/GetCities", produces = "application/json; charset=UTF-8") @ResponseBody public List<City> findCities() { var cities = (List<City>) cityService.findAll(); return cities; } ``` 對于`GetCities`路徑,將調用`findCities()`方法。 `produces`參數指示該方法返回 JSON 數據; Spring `RequestResponseBodyMethodProcessor`通過使用`HttpMessageConverter`寫入響應主體來處理用`@ResponseBody`注解的方法的返回值。 在我們的例子中,消息轉換器是`MappingJackson2HttpMessageConverter`,它使用 Jackson 的`ObjectMapper`讀取和寫入 JSON。 (Jackson 是一個流行的 Java JSON 庫。) `resources/templates/index.ftl` ```java <!DOCTYPE html> <html> <head> <title>Home Page</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="webjars/jquery/jquery.min.js"></script> </head> <body> <button id="mybtn">Get cities</button> <div> <ul id="output"> </ul> </div> <script> $('#mybtn').click(function () { $.getJSON('GetCities', function (data) { $("ul#output > li").remove(); $.each(data, function (key, value) { $("#output").append('<li>' + value['name'] + " " + value['population'] + '</li>'); }); }); }); </script> </body> </html> ``` `index.ftl`文件是主頁的模板。 它包含一個按鈕,該按鈕對 Web 應用執行異步請求。 它將加載城市列表并將其寫入 HTML 列表。 ```java <script src="webjars/jquery/jquery.min.js"></script> ``` 我們包括 JQuery 庫。 多虧`webjars-locator`,我們可以包括一個版本無關的 JQuery 庫。 因此,如果 JQuery 的版本發生更改,我們不必更新鏈接。 ```java <script> $('#mybtn').click(function () { $.getJSON('GetCities', function (data) { $("ul#output > li").remove(); $.each(data, function (key, value) { $("#output").append('<li>' + value['name'] + " " + value['population'] + '</li>'); }); }); }); </script> ``` 通過`$.getJSON()`方法,我們使用 HTTP GET 請求以 JSON 格式加載數據。 數據用`$.each()`遍歷并寫入 HTML 列表。 在本教程中,我們在 Spring Boot Web 應用中使用了`@ResponseBody`注解。 您可能也對相關教程感興趣: [Spring Boot `ResponseEntity`教程](/springboot/responseentity/), [Spring Boot `@PathVariable`教程](/springboot/pathvariable/), [Spring Boot 上傳文件](/springboot/uploadfile/), [Spring Boot `@RequestParam`教程](/springboot/requestparam/),[獨立的 Spring 應用](/articles/standalonespring/), [Java 教程](/lang/java/)或列出[所有 Spring Boot 教程](/all/#springboot)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看