虽然网上每个页面都说@RestController是@Component的规范,但我不知道它是否与DispatcherServlet有关。但是当我通过在 @RestController 和 @Component 之间切换来尝试下面的代码时,我没有看到相同的行为:
首先我尝试使用@RestController:
@RestComponent
public class TestController {
@RequestMapping(value="/testController", method=RequestMethod.POST,consumes=MediaType.APPLICATION_JSON_VALUE)
public void testController() {
System.out.println("Hello");
}
}
我在控制台中得到以下输出:
你好
其次我尝试使用@Component + @ResponseBody:
@Component
@ResponseBody
public class TestController {
@RequestMapping(value="/testController", method=RequestMethod.POST,consumes=MediaType.APPLICATION_JSON_VALUE)
public void testController() {
System.out.println("Hello");
}
}
我在邮递员上收到错误:
{
"timestamp": 1570998345860,
"status": 405,
"error": "Method Not Allowed",
"message": "Request method 'POST' not supported",
"path": "/testController"
}
如果两个注释相同,那么为什么输出存在差异?
下面是 @RestController 和 @Controller 的源代码,可以看出 @RestController 和 @Controller 都是 @Component 的规范:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
}
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
}
也许它必须与DispatcherServlet有关。Dispatcher Servlet 可能只检查 @RestController 注解的类中的 URL。
猛跑小猪
慕桂英546537
函数式编程
茅侃侃
相关分类