RestController 类中 Spring Boot 中不支持内容类型“textplain;charset=UTF-8”错误

作者:编程家 分类: spring 时间:2025-04-28

在使用Spring Boot开发Restful API时,有时候会遇到一个常见的错误:“不支持内容类型‘text/plain;charset=UTF-8’”。这个错误通常在使用@RestController注解的类中出现,该注解用于标识该类为RESTful API的控制器。

这个错误的原因是因为Spring Boot默认的消息转换器不支持将文本类型的响应以"text/plain;charset=UTF-8"的格式返回给客户端。而在某些情况下,我们可能需要返回纯文本的响应,比如返回简单的字符串或者HTML代码片段。

为了解决这个问题,我们可以自定义一个消息转换器来支持"text/plain;charset=UTF-8"的内容类型。下面是一个示例代码:

java

import org.springframework.http.MediaType;

import org.springframework.http.converter.HttpMessageConverter;

import org.springframework.http.converter.StringHttpMessageConverter;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

import java.nio.charset.StandardCharsets;

import java.util.ArrayList;

import java.util.List;

@RestController

public class MyController {

@GetMapping(value = "/text", produces = "text/plain;charset=UTF-8")

public String getText() {

return "Hello, World!";

}

@GetMapping(value = "/html", produces = MediaType.TEXT_HTML_VALUE)

public String getHtml() {

return "

Hello, World!

";

}

// 注册自定义的消息转换器

@Bean

public HttpMessageConverters customConverters() {

List> converters = new ArrayList<>();

StringHttpMessageConverter stringConverter = new StringHttpMessageConverter(StandardCharsets.UTF_8);

stringConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.TEXT_PLAIN));

converters.add(stringConverter);

return new HttpMessageConverters(true, converters);

}

}

在上面的代码中,我们定义了一个名为MyController的类,并使用@RestController注解将其标识为RESTful API的控制器。该类中包含了两个方法:getText()和getHtml()。

getText()方法使用@GetMapping注解来处理GET请求,并通过produces属性指定了返回的内容类型为"text/plain;charset=UTF-8"。在方法体中,我们简单地返回了一个字符串。

getHtml()方法也使用@GetMapping注解来处理GET请求,并通过produces属性指定了返回的内容类型为"text/html"。在方法体中,我们返回了一个带有

标签的HTML代码片段。

为了让Spring Boot支持"text/plain;charset=UTF-8"的内容类型,我们需要注册一个自定义的消息转换器。在上面的示例代码中,我们通过自定义一个HttpMessageConverters来注册了一个StringHttpMessageConverter,并将其支持的媒体类型设置为"text/plain"。同时,我们还指定了字符串的编码格式为UTF-8。

通过以上的代码,我们就可以在Spring Boot中支持"text/plain;charset=UTF-8"的内容类型了。当我们访问"/text"路径时,将会返回一个纯文本的响应:"Hello, World!"。而当我们访问"/html"路径时,将会返回一个带有

标签的HTML响应。

在本文中,我们讨论了在Spring Boot中处理不支持内容类型"text/plain;charset=UTF-8"的错误,并提供了一个解决方案。我们通过自定义一个消息转换器来支持该内容类型,并给出了相应的示例代码。通过这种方式,我们可以在Spring Boot中轻松地返回纯文本或者HTML响应。希望本文对你在使用Spring Boot开发Restful API时有所帮助!