【问题标题】:Why the annontation @ResponseBody along with the return value 'ModelAndView' doesn't work?为什么注释 @ResponseBody 以及返回值“ModelAndView”不起作用?
【发布时间】:2022-01-10 09:59:46
【问题描述】:

我在Spring Boot项目中写一些控制器的时候,想用注解@ResponseBody来测试控制器接口是否正常工作,所以我创建了一个这样的控制器:

@ResponseBody
@GetMapping("/about")
public ModelAndView about(){
    return new ModelAndView("about");
}

为了测试这个控制器是否正常工作,我使用浏览器对其进行了测试。我没有使用 URL about.html,所以我希望浏览器应该显示一个 JSON 字符串来描述 ModelAndView 对象。这不是发生的事情;相反,它显示了 dispatchServlet 无法解析模板的错误。

注释似乎不起作用。我清除了缓存,清理了项目并重建了它,但这并没有帮助。我做错了什么?

【问题讨论】:

  • 不太确定你想在输出中看到什么,但是 Spring 会尝试找到一些可以渲染视图的对象。这可能是一个输出到 servlet 输出流的类,或者它可能是一个类似于 jsp 文件的东西,它被转换为一个 servlet。

标签: java spring-boot spring-mvc


【解决方案1】:

查看doc,您就会明白为什么不允许这样做。

public @interface ResponseBody 表示方法的注解 返回值应绑定到网络响应正文

ModelAndView 否则返回时包含 2 个不同的信息。

A) 传递给视图并可以从视图访问的模型对象

B) 应呈现的视图(例如 myView.jsp)以及可访问模型对象的位置。

@ResponseBody 应在您向用户传递包含您想要的一些数据的单个响应时使用。用户希望只读取您从控制器返回的内容。

当您向用户传递您在应用程序中定义的动态视图时,应使用ModelAndView

这两个是两个不同的场景。

【讨论】:

    猜你喜欢
    • 2021-02-08
    • 2015-01-20
    • 2011-01-29
    • 2019-07-03
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多