没有@ResponseBody的@RestController方法工作不正确

时间:2016-02-15 10:50:13

标签: java spring rest spring-mvc 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。

春季版:4.1.6.RELEASE

P.S。

我发现只有这部分与mvc config相关:

<context:annotation-config/>

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

1 个答案:

答案 0 :(得分:6)

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

默认情况下,DispatcherServlet会注册现已弃用的AnnotationMethodHandlerAdapterDefaultAnnotationHandlerMapping,可以将其视为前任或更新的内容。