Spring Boot 服务文本
最后修改时间:2023年7月20日
Spring Boot 服务文本教程展示了如何在 Spring Boot 应用程序中提供纯文本。
Spring 是一个流行的 Java 应用程序框架,而 Spring Boot 是 Spring 的一个演进,它有助于轻松创建独立的、生产级的基于 Spring 的应用程序。
内容类型
内容类型,或媒体类型,是一个与文件一起发送的字符串,指示文件的类型。它描述了内容格式;例如,HTML 文件可能被标记为 text/html,或者图像文件被标记为 image/png。它与 Windows 上的文件名扩展名具有相同的作用。
content-type
标头值用于指示资源的媒体类型。 text/plain; charset=utf-8
用于文本文件。
Spring Boot 服务文本示例
以下应用程序展示了三种向客户端发送文本的方式。
build.gradle ... src ├── main │ ├── java │ │ └── com │ │ └── zetcode │ │ ├── Application.java │ │ └── controller │ │ └── MyController.java │ └── resources └── test ├── java └── resources
这是项目结构。
plugins { id 'org.springframework.boot' version '3.1.1' id 'io.spring.dependency-management' version '1.1.0' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' }
这是 Gradle 构建文件。我们只需要 spring-boot-starter-web
依赖项。
package com.zetcode.controller; import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.io.IOException; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; @Controller public class MyController { @GetMapping(value = "/", produces = MediaType.TEXT_PLAIN_VALUE) public @ResponseBody String home() { return "home page"; } @GetMapping(value = "/about") public void test(HttpServletResponse response) throws IOException { response.addHeader("content-type", "text/plain; charset=utf-8"); response.setStatus(200); PrintWriter out = response.getWriter(); out.println("about page"); } @GetMapping(value = "/contact") public ResponseEntity<String> contact() { var httpHeaders = new HttpHeaders(); httpHeaders.setContentType(new MediaType("text", "plain", StandardCharsets.UTF_8)); return new ResponseEntity<>("contact page", httpHeaders, HttpStatus.OK); } }
我们有三种在控制器中返回文本的方法。每种方法都使用不同的技术。
@Controller public class MyController { @GetMapping(value = "/", produces = MediaType.TEXT_PLAIN_VALUE) public @ResponseBody String home() { return "home page"; }
由于控制器使用 @Controller
注解,我们必须添加 @ResponseBody
注解以直接写入响应的主体,而不是返回要处理的视图名称。 home
方法具有 String
返回类型,并且 produces
属性设置为 MediaType.TEXT_PLAIN_VALUE
。
@GetMapping(value = "/about") public void test(HttpServletResponse response) throws IOException { response.addHeader("content-type", "text/plain; charset=utf-8"); response.setStatus(200); PrintWriter out = response.getWriter(); out.println("about page"); }
第二种方式使用 HttpServletResponse
。这是一种低级方法,我们直接写入响应对象。
@GetMapping(value = "/contact") public ResponseEntity<String> contact() { var httpHeaders = new HttpHeaders(); httpHeaders.setContentType(new MediaType("text", "plain", StandardCharsets.UTF_8)); return new ResponseEntity<>("contact page", httpHeaders, HttpStatus.OK); }
在第三种情况下,我们使用 ResponseEntity
来提供文本。媒体类型在 HttpHeaders
中设置。
package com.zetcode; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
Application
是设置 Spring Boot 应用程序的入口点。
我们使用 ./gradlew bootRun
运行应用程序。
$ curl localhost:8080 home page $ curl localhost:8080/about about page $ curl localhost:8080/contact contact page
这是所有三个页面的输出。
$ curl -i localhost:8080/contact HTTP/1.1 200 Content-Type: text/plain;charset=UTF-8 Content-Length: 12 Date: Thu, 20 Jul 2023 09:44:07 GMT contact page
使用 curl 的 -i
选项,我们还包括标头。
在本文中,我们展示了如何从 Spring Boot 应用程序向客户端发送文本数据。