Подтвердить что ты не робот

@RestController без @ResponseBody о некорректных методах

У меня есть следующий контроллер:

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

<context:annotation-config/>

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

Ответ 1

Чтобы иметь возможность использовать @RestController, вы должны явно включить новые классы обработки аннотаций. Добавляя <mvc:annotation-driven /> (для XML) или @EnableWebMvc (для Java Config).

По умолчанию DispatcherServlet регистрирует, теперь устаревшие, AnnotationMethodHandlerAdapter и DefaultAnnotationHandlerMapping, которые можно считать предшественником или более новым.