Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc 在spring boot中定义基本rest控制器?_Spring Mvc_Spring Boot - Fatal编程技术网

Spring mvc 在spring boot中定义基本rest控制器?

Spring mvc 在spring boot中定义基本rest控制器?,spring-mvc,spring-boot,Spring Mvc,Spring Boot,最初我只有MyRestController abstract class BaseController { public ResponseEntity<Object> run(String path, String[] params) { Object result = null; switch (path.toLowerCase()) { // case for each path case

最初我只有
MyRestController

abstract class BaseController {

    public ResponseEntity<Object> run(String path, String[] params) {
        Object result = null;
        switch (path.toLowerCase()) {
            // case for each path
            case MY_PATH:
                result = someService.myPath(param[0]);
                break;
            case MY_OTHER_PATH:
                result = someService.myOtherPath(param[0], param[1]);
                break;
            default:
                System.out.println("No");
                throw new Exception();
        }
        return new ResponseEntity<>(result, HttpStatus.OK);
    }
}
@CrossOrigin(origins=“*”)
@RestController
公共类MyRestController{
@RequestMapping(value=“/v1/endpoint”,method={RequestMethod.GET})
公共响应端点(HttpServletRequest),
HttpServletResponse(响应){
//etc-在控制器之间使用一个
//单个函数调用及其相应参数的差异
}
}
然后我意识到许多功能在其他6个控制器中被重用,所以我使用抽象的
BaseController

abstract class BaseController {

    public ResponseEntity<Object> run(String path, String[] params) {
        Object result = null;
        switch (path.toLowerCase()) {
            // case for each path
            case MY_PATH:
                result = someService.myPath(param[0]);
                break;
            case MY_OTHER_PATH:
                result = someService.myOtherPath(param[0], param[1]);
                break;
            default:
                System.out.println("No");
                throw new Exception();
        }
        return new ResponseEntity<>(result, HttpStatus.OK);
    }
}
这就成功了

我的问题是:

  • 为什么我不能将
    CrossOrigin
    MyRestController
    移动到
    BaseController
  • 我被告知使用
    抽象类。这在这个用例中有帮助吗
  • 我使用
    switch
    语句中的
    path
    将重复的try/catch替换为单个函数,以使用正确的方法和正确的参数。这似乎有点骇人听闻。。。有更好的方法吗

感谢查看注释的文档
CrossOrigin

这就是它不起作用的原因,因为您的
BaseController
没有任何方法添加到
RequestMappingHandlerMapping
中,所以它不起作用

只要
BaseController
是抽象的,就没有必要这样做,除非您有一种方法希望您的扩展控制器覆盖它

关于交换机的更新


这实际上取决于每种情况下的
controller
方法数量。如果有多个方法属于
MY_PATH
的情况,那么我相信您没有问题,但是我可以看到这些情况可能会变成一个非常长的switch语句。这真的取决于作为维护者的您。在我看来,我会将switch语句案例分解为不同的方法,并让扩展的
控制器调用该方法。但这是个人偏好。

好的,太好了,我理解你的两个答案。非常感谢。最后一个问题你介意试一试吗?我想我会保持一切不变,只是把
抽象的
改成普通的类。再次感谢!