Spring Boot不使用@ResponseBody注解返回纯文本的问题咨询
错误原因分析
默认@Controller类的方法返回字符串时,Spring会将返回值作为视图名传递给视图解析器处理,你引入了Thymeleaf模板引擎,因此框架会尝试查找名为This is a plain Text的模板文件,找不到就会抛出TemplateInputException异常。
以下是不需要加@ResponseBody就能返回纯文本、同时支持灵活自定义返回类型的两种方案:
方案1:使用ResponseEntity作为返回值
ResponseEntity是Spring原生提供的全响应配置类,包含响应状态码、响应头、响应体的完整配置能力,无需添加@ResponseBody注解即可直接生效,可动态调整返回类型。
import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @GetMapping("/test/message") public ResponseEntity<String> Message() { // 可根据业务逻辑动态修改contentType,支持TEXT_PLAIN、TEXT_HTML、APPLICATION_JSON等任意类型 return ResponseEntity.status(HttpStatus.OK) .contentType(MediaType.TEXT_PLAIN) .body("This is a plain Text"); }
方案2:直接操作HttpServletResponse
直接注入HttpServletResponse对象写入响应内容,所有响应规则完全自主控制,自由度最高。
import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @GetMapping("/test/message") public void Message(HttpServletResponse response) throws IOException { // 自定义响应状态码、内容类型、编码等所有参数 response.setStatus(HttpServletResponse.SC_OK); response.setContentType("text/plain;charset=UTF-8"); PrintWriter writer = response.getWriter(); writer.write("This is a plain Text"); writer.flush(); }
内容的提问来源于stack exchange,提问作者Shakib
相关产品推荐
相关产品推荐

