Spring项目使用@Controller报白标签错误换@RestController正常原因咨询
Spring项目@Controller注解触发白标签错误的原因
核心差异点
@RestController是Spring提供的组合注解,等价于@Controller+@ResponseBody,两者的核心逻辑差异在于是否走视图解析流程:- 用
@Controller注解的控制器,Spring默认会将方法的返回值当作视图名称,去项目的模板资源目录下匹配对应的视图文件(比如Thymeleaf的templates目录下的HTML文件、JSP文件等),如果找不到匹配的视图文件,就会抛出404异常,返回Spring默认的白标签错误页。 - 用
@RestController注解的控制器,会自动给所有接口方法加上@ResponseBody注解,方法返回值会直接被序列化为JSON/XML等格式的响应体返回给客户端,不会触发视图解析逻辑,自然不会因为找不到视图文件报错。
- 用
验证示例
如果你用@Controller写了如下接口:
@Controller public class DemoController { @GetMapping("/test") public String testApi() { return "success"; } }
此时Spring会尝试查找名为success的视图模板,找不到就会返回白标签错误。如果你希望@Controller也能直接返回响应内容,只需要在对应方法上添加@ResponseBody注解即可,效果和用@RestController一致。
内容的提问来源于stack exchange,提问作者Swapnil Soni
相关产品推荐
相关产品推荐

