我有以下 Controller :

@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>

你能解释这种行为吗?

P.S.

Spring 版:4.1.6.RELEASE
P.S.

我只发现了与mvc config相关的部分:
<context:annotation-config/>

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

最佳答案

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

默认情况下,DispatcherServlet注册现在不推荐使用的AnnotationMethodHandlerAdapterDefaultAnnotationHandlerMapping,它们可以被视为以前版本或更新版本。

09-27 05:20