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

发布于 2022-09-11 19:21:51 字数 1414 浏览 45 评论 0

现在越来越多前后端分离项目,大多数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服务下作用已经很小了?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

顾挽 2022-09-18 19:21:51

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

空心空情空意 2022-09-18 19:21:51

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

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

煮茶煮酒煮时光 2022-09-18 19:21:51

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

强者自强 2022-09-18 19:21:51

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

权谋诡计 2022-09-18 19:21:51

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文