关于现在REST API的Java服务端Controller层的作用是否越来越小了?

现在越来越多前后端分离项目,大多数Java服务端都只提供REST接口。Controller层感觉好多都只是将参数转给Service层而已

例如曾经见到的代码:

@RestController
public class LoginController {
    
    @Autowired
    private LoginService loginService;
    
    @RequestMapping("/login")
    public ApiResult login(String userName, String password){
        return loginService.login(userNmae, password);
    }
}

Java服务端要实现一个接口,感觉还是挺麻烦的,要建立Controller,Service,ServiceImpl,DAO,DaoImpl大体五个文件,现在的ORM框架基本都支持代理,少了DaoImpl。但还是有四个文件需要创建。

今天看到了Spring-data-rest觉得他的设计思路很好,但还是没有找到自定义返回结果的方法.只需要一个注解就自动生成了REST API接口

@RepositoryRestResource(path = "user")
@Repository
public UserDao extends JpaRepository<Person, Long> {
 
}

//就一个@RepositoryRestResource注解就生成了以下几个接口
GET  http://localhost:8080/user  //用户列表
GET  http://localhost:8080/user/{id} //单个用户
POST http://localhost:8080/user // 创建用户 以application/json
PUT  http://localhost:8080/user/{id}  //更新用户信息 请求体为 applcation/json
还有HEAD,PATCH,DELETE等接口

当然spring-data-rest有很多不足,但框架有意的封装Controller层,这是否说明Java服务端 REST服务可以无Controller.可以不用写Controller层代码。只关心业务逻辑?

@RestService
public interface LoginService {
    
    @RequestMapping("/login")
    ApiResult login(String userName, String password);
}

类似上面的代码是否我们对于@RestService的需求要大于@RestController?Controler层是否在现如今的REST服务下作用已经很小了?

阅读 7.1k
5 个回答

在好多年前,这个问题叫做service层是多余的嘛,是同一个问题。

顺带说一句你觉得controller没用,是因为spring为你做了太多,以至于写些注解就完成了90%的工作。
即使如此,Controller能做的还有不少,比如数据校验,数据加工,并不是请求的参数都是满足service参数,service返回也不都是满足响应格式

确实没有以前大了,比如前后端分离之后,基本就不管页面跳转,也不需要给模板提供数据了,但是本质上还是作为“入口”的
dao是基本的数据存取,service组装dao和其他的东西组成业务逻辑,controller把service暴露出去

个人觉得,springmvc模式中,一个http请求过来,处理请求的还是servlet,是否需要controller其实影响不大,如果可以封装的更高效,更便捷,那最好,楼上无用的结论持保留意见吧

目前我写spring的原则是,如果不需要事务和复用的业务代码直接写到controller的方法内,直接调用dao实现。

rest下Controller几乎完全没用,是时候出现一个新的框架,取消Controller。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题