【找不到视图问题解决】@RestController 与 @Controller注解的使用区别

一、问题描述

苍穹外卖在菜品分页查询功能实现的过程中,出现了找不到视图的情况

2024-07-12 21:54:20.860 ERROR 22488 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Could not resolve view with name 'admin/dish/page' in servlet with name 'dispatcherServlet'] with root cause

javax.servlet.ServletException: Could not resolve view with name 'admin/dish/page' in servlet with name 'dispatcherServlet'
	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1383) ~[spring-webmvc-5.3.22.jar:5.3.22]
	at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1148) ~[spring-webmvc-5.3.22.jar:5.3.22]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1087) ~[spring-webmvc-5.3.22.jar:5.3.22]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.22.jar:5.3.22]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.22.jar:5.3.22]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.22.jar:5.3.22]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[tomcat-embed-core-9.0.65.jar:4.0.FR]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.22.jar:5.3.22]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.65.jar:4.0.FR]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.65.jar:9.0.65]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.22.jar:5.3.22]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.22.jar:5.3.22]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
	at java.base/java.lang.Thread.run(Thread.java:1623) ~[na:na]

原来的代码

@Controller
@RequestMapping("/admin/dish")
@Api(tags="菜品相关接口")
@Slf4j
public class DishController {

    @Autowired
    private DishService dishService;

    /**
     * 分页查询菜品
     */
     @GetMapping("/page")
     @ApiOperation("菜品分页查询")
     public Result<PageResult> page( DishPageQueryDTO dishPageQueryDTO){
         log.info("菜品分页查询:{}",dishPageQueryDTO);
         PageResult pageResult = dishService.pageQuery(dishPageQueryDTO);
         return Result.success(pageResult);
     }
}

二、解决的措施

将注解@Controller 更换成 @RestController即可。控制器方法返回的请求体,但注解却需要直接解析的是视图,导致Spring MVC视图解析失败

具体原因我们得去思考以下这两个注解到底有什么的不同

@RestController 和 @Controller 是Spring框架中用于处理HTTP请求的注解,它们之间存在一些关键的区别,主要体现在它们对响应体的处理方式上。

@Controller

  • @Controller 注解用于标记在一个类上,表明这个类是一个Spring MVC Controller处理器。
  • 当处理器方法返回字符串时,它通常被解释为视图名(View Name),然后Spring MVC会尝试解析这个视图名并渲染相应的视图。当使用@Controller注解时,通常会结合JSP、Thymeleaf等模板引擎来渲染HTML页面。
  • @Controller注解的处理器方法可以直接返回视图名(String类型),也可以返回ModelAndView对象,后者包含了视图名和模型数据。
  • 如果需要返回JSON或XML等非HTML内容,则需要在处理器方法中使用@ResponseBody注解,或者将方法返回类型设置为ResponseEntityHttpEntity等,来指定响应体。


@RestController

  • @RestController@Controller@ResponseBody的组合注解。该类下的所有方法默认都会应用@ResponseBody注解。
  • 使用@RestController注解的控制器类,其方法默认返回的数据会直接写入HTTP响应体(Response Body)中,通常用于构建restful  Web服务。
  • 常见的返回类型包括ResponseEntityHttpEntityString(直接作为JSON或XML字符串返回)、以及任何可以被自动转换为JSON或XML的对象(Spring MVC通过消息转换器自动完成转换)。
  • 当你需要构建restful API时,@RestController是一个更合适的选择,因为它简化了代码,避免了在每个方法上都添加@ResponseBody注解。

使用@Controller时,通常用于返回视图名以渲染页面,适用于传统的Web应用。

使用@RestController时,通常用于构建restful API,返回的数据会直接作为响应体返回给客户端,适合前后端分离的应用场景。

三、猜测

所以我就在猜测,难道 菜品分页查询 这个功能需要用到 @ResponseBody这个注解么?不然为什么将@Controller 更换成 @RestController问题就迎刃而解了?于是我尝试修改代码如下:

果然解决了

所以@ResponseBody到底有什么用呢,再来探讨一下

@ResponseBody是Spring MVC中用于将控制器方法的返回值绑定到HTTP响应体上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/800865.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenSceneGraph学习笔记

目录 引言第一章&#xff1a;OSG概述一、前言&#xff08;1&#xff09;为什么要学习OSG?&#xff08;2&#xff09;OSG的组成&#xff08;3&#xff09;OSG的智能指针&#xff08;4&#xff09;OSG的安装编译 二、第一个OSG程序&#xff08;1&#xff09;Hello OSG程序&#…

移动UI:具备什么特征,可以被认定为科技风格。

移动UI设计在科技风格上通常具备以下特征&#xff1a; 1. 清晰简洁的排版&#xff1a; 科技风格的移动UI通常采用清晰简洁的排版&#xff0c;注重信息的层次感和结构化&#xff0c;以便用户能够快速、直观地获取所需信息。 2. 几何形状和线条&#xff1a; 科技风格的移动UI常…

Vscode ssh远程连接Linux服务器登录时密码password无法输入

问题 最近在用Vscode远程连接Linux服务器时&#xff0c;在终端提示输入密码password的时候用键盘输入没有反应。 以为是键盘坏了&#xff0c;然后尝试复制粘贴没有用。 后来找到了原因以及解决方法&#xff0c;感谢原帖作者&#xff08;原贴链接粘在下面&#xff09; 原因 …

2024.7.16日 最新版 docker cuda container tookit下载!

nvidia官方指导 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html 其实就是这几个命令&#xff0c;但是有墙&#xff1a; curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/shar…

知识图谱研究综述笔记

推荐导读&#xff1a;知识图谱Knowledge Graph Embeddings 论文标题:A Survey on Knowledge Graphs:Representation, Acquisition and Applications发表期刊:IEEE TRANSACTIONS ON NEURAL NETWORKS AND LEARNING SYSTEMS, 2021本文作者&#xff1a;Shaoxiong Ji, Shirui Pan, M…

[A-04] ARMv8/ARMv9-Cache的相关策略

ver0.3 前言 前面我们已经通过三篇文章反反复复的讲Cache的概念、结构、架构&#xff0c;相信大家对Cache已经大概有了初步的了解。这里简单归纳一下: (1) Cache从硬件视角看&#xff0c;是连接PE-Core和主存的一种存储介质&#xff0c;存储的数据是主存中数据的副本&#xf…

精选电脑视频录制软件,这3款让录制更高效!

随着信息技术的飞速发展&#xff0c;电脑视频录制软件在日常生活和工作中的应用越来越广泛。无论是教学演示、游戏录制、网络会议&#xff0c;还是个人创作&#xff0c;视频录制都扮演着不可或缺的角色。本文将详细介绍3款电脑视频录制软件&#xff0c;旨在帮助用户选择最适合自…

AI写作辅助工具,如何避免学术不端?

正如常言道&#xff0c;水边行走难免沾湿——虽然这个比喻并不完全适用——AI创作依赖于现有数据&#xff0c;其生成内容多基于已有素材。目前AI的智能尚未达到人类思维的复杂性&#xff0c;创作过程仍显机械。因此&#xff0c;AI撰写的文章常带有可辨识的特征。 在学术界&…

ARM功耗管理之功耗数据与功耗收益评估

安全之安全(security)博客目录导读 思考&#xff1a;功耗数据如何测试&#xff1f;功耗曲线&#xff1f;功耗收益评估&#xff1f; UPF的全称是Unified Power Format&#xff0c;其作用是把功耗设计意图&#xff08;power intent&#xff09;传递给EDA工具&#xff0c; 从而帮…

移动UI:任务中心的作用,该如何设计更合理?

任务中心是移动应用中用于展示和管理用户待办任务、提醒事项、用户福利、打卡签到等内容的功能模块。合理设计任务中心可以提升用户体验和工作效率。 以下是一些设计任务中心的合理建议&#xff1a; 1. 易于查看和管理&#xff1a; 任务中心的设计应该使用户能够快速、直观地…

蓝牙信标为什么成了众多企业必要的设备?

蓝牙信标对于很多企业单位或是具有一定危险性的化工厂都是必要的&#xff0c;如此才能保证人员的人身安全&#xff0c;并对管理和环境情况的变化有实时的了解&#xff0c;在出现意外的时候&#xff0c;可以将危害和损失降到最低&#xff0c;而蓝牙信标备受信赖的原因无非就是它…

OrangePi 学习摘录

文章目录 1. 参考2. 开发板 Orange-Pi-CM4 预览3. 烧录 Linux 镜像到 TF 卡中4. 制作桌面版镜像qemu/chroot 5. Armbian6. 编译 1. 参考 淘宝 香橙派官网 Orange-Pi-3B Orange-Pi-CM4 基于docker构建香橙派zero系统构建环境 2. 开发板 Orange-Pi-CM4 预览 3. 烧录 Linux 镜像…

阿里云CDN架构技术(一)

CDN补充 cdn内容分发网络&#xff08;content delivery network&#xff0c;cdn&#xff09; 构建在互联网TCP/IP四层模型之上对用户透明的覆盖网。 该网络通过全球范围内分布式部署边缘服务器&#xff0c;将互联网内容从互联网中心缓存到靠近用户的边缘服务器上&#xff0c;…

嵌入式人工智能(2-树莓派4B开发板硬件环境搭建)

1.硬件开发环境&#xff08;T型板&#xff09; 树莓派4B开发板需要搭配面包板&#xff0c;T型板将40个GPIO口引出&#xff0c;再将T型板插到面包板上面。这个地方需要注意插接的方向&#xff0c;由于插树莓派引脚的排线没有防呆设计&#xff0c;因此&#xff0c;请注意方向&am…

【轻松拿捏】Java都有哪些特性?

Java都有哪些特性&#xff1f; 1. 面向对象 2. 平台无关性 3. 简单性 4. 安全性 5. 内存管理 6. 多线程 7. 动态性 8. 分布式计算 9. 健壮性 10. 高性能 11. 丰富的标准库 12. 社区支持和生态系统 13. 可移植性 14. 安全性和强类型 15. 模块化和可扩展性 总结 …

线上CPU 100%问题排查

1、安装jdk工具 jstack 2、使用top命令查看占用CPU高的进程 3、使用命令 top -Hp %ThreadId 查看进程中具体线程使用CPU情况 4、使用命令 jstack -l %ThreadId > cc.txt 保存线程堆栈信息 5、分析具体线程ID的堆栈&#xff08;16进制&#xff09;&#xff0c;看看是否有BL…

Java SE—基本数据类型(详细讲解)

&#x1f4dd;个人主页&#x1f339;&#xff1a;誓则盟约 ⏩收录专栏⏪&#xff1a;Java SE &#x1f921;往期回顾&#x1f921;&#xff1a;Python 神器&#xff1a;wxauto 库——解锁微信自动化的无限可能 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f3…

WooCommerce网站加速指南:入门级方法

在如今快节奏的网络时代&#xff0c;网站加载速度直接影响用户体验和销售转化率。对于WooCommerce网站来说&#xff0c;这一点尤为重要。那么&#xff0c;如何让你的网站跑得更快呢&#xff1f;下面&#xff0c;我将分享一些入门级的方法&#xff0c;帮助你显著提升WooCommerce…

不是取代,而是共生!气象科学的未来需要AI与数值预报的有机结合

2022 年常被业内人士视为 AI 赋能气象预测的元年。 从这一年开始&#xff0c;AI 在气象领域的应用呈现爆发式增长&#xff0c;NVIDIA DLWP、Google MetNet-2 等一系列创新方法及模型如雨后春笋般涌现&#xff0c;国内外「首次」、「第一」、「开创性」成果频出&#xff0c;尤其…

地暖安装工艺流程

地暖安装工艺全流程 基层处理→材料进场→清点材料→安装分集水器 →边界保温条铺设 →保温板铺 → 反射膜铺设 → 钢筋网铺设 → 地暖盘管铺设 → 地暖管与分集水器连接安装 → 第一次打压 → 管路施工验收 → 带压回填层施工 → 伸缩缝布置→养护期满后二次打压 → 工程验收…