有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java@RestController和@Component之间的细微差别

尽管互联网上的每一页都说@RestController是@Component的规范。我不知道它是否与DispatcherServlet有关。但当我在@RestController&;之间切换,尝试下面的代码时@组件,我看不到相同的行为:

首先,我尝试使用@RestController:

@RestComponent
public class TestController {
    @RequestMapping(value="/testController", method=RequestMethod.POST,consumes=MediaType.APPLICATION_JSON_VALUE)
    public void testController() {
        System.out.println("Hello");
    }

}

我在控制台中得到以下输出:

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&;的源代码@控制器,显示@RestController&@控制器是@组件的规格:

@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


共 (0) 个答案