【问题标题】:@RestController without @ResponseBody on methods work incorrect@RestController 没有 @ResponseBody 的方法工作不正确
【发布时间】:2016-05-26 05:54:57
【问题描述】:

我有以下控制器:

@RestController
@RequestMapping(value = "/base/url")
public class MyController {

    @RequestMapping(
            value = "/child/url",
            method = RequestMethod.POST
    )
    @ResponseBody
    public String mmm() {      
        return "Ok";
    }
}

现在它可以工作了(服务器响应 Ok),但我认为 @ResponseBody 是多余的,因为我们使用了 @RestController 并删除了 @ResponseBody 注释

我看到以下服务器响应:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
        <title>Error 404 Not Found</title>
    </head>
    <body>
        <h2>HTTP ERROR 404</h2>
        <p>Problem accessing /base/url/child/url/Ok. Reason:

            <pre>    Not Found</pre>
        </p>
        <hr />
        <i>
            <small>Powered by Jetty://</small>
        </i>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>                                                


    </body>
</html>

你能解释一下这种行为吗?

附言

春季版:4.1.6.RELEASE

附言

我只找到了与 mvc config 相关的这部分:

<context:annotation-config/>

<context:component-scan base-package="base.package"/>

【问题讨论】:

  • 这很有趣。似乎@RestController 没有绕过 viewResolver
  • 我昨天确实遇到了同样的问题!仅当我包含 viewResolver 和多余的 @ResponseBody 注释时才解决。
  • 确保你不是在调用/base/url/child/url/Ok,而是/base/url/child/url
  • @jfcorugedo 我绝对确定
  • 这与 mvc 无关。如果没有&lt;mvc:annotation-driven /&gt;,您正在使用旧的不推荐使用的类...添加'` 以启用支持@RestController 的新类。旧的不会并将@RestController 视为@Controller

标签: java spring rest spring-mvc controller


【解决方案1】:

为了能够使用@RestController,您必须显式启用新的注释处理类。通过添加&lt;mvc:annotation-driven /&gt;(用于XML)或@EnableWebMvc(用于Java Config)。

默认情况下,DispatcherServlet 注册了现在已弃用的 AnnotationMethodHandlerAdapterDefaultAnnotationHandlerMapping,它们可以被认为是前身或更新的东西。

【讨论】:

  • 谢谢。我将所有 JSP 重构为 Groovy 模板(作为响应正文返回),并且想知道为什么它仍在寻找 JSP。我花了一段时间才找到这个答案。很多人对做出相同的切换或只是实现 REST 感到困惑。您的答案应排名较高以便轻松找到。
猜你喜欢
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
  • 2022-12-20
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多