现在越来越多前后端分离项目,大多数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服务下作用已经很小了?
在好多年前,这个问题叫做service层是多余的嘛,是同一个问题。
顺带说一句你觉得controller没用,是因为spring为你做了太多,以至于写些注解就完成了90%的工作。
即使如此,Controller能做的还有不少,比如数据校验,数据加工,并不是请求的参数都是满足service参数,service返回也不都是满足响应格式