java - 什么属于Controller层,什么属于Service层?

标签 java spring rest spring-boot spring-rest

我有一个简单的 Spring-Boot Restful 应用程序。我有一个 Controller 层和一个存储层,但没有服务层。让我向您展示我的 Controller 方法之一:

@RequestMapping(value = "users/{id}", method = RequestMethod.GET)
public Resource<UserResource> get(@PathVariable Long id) throws NotFoundException {
    log.info("Invoked method: get with ID: " + id);
    log.warn("Searching for user with ID " + id);
    User user = userRepository.findOne(id);
    if (user == null){
        log.error("Unexpected error, User with ID " + id + " not found");
        throw new NotFoundException("User with ID " + id + " not found");
    }
    log.info("User found. Sending request back. ID of user is " + id);
    return new Resource<UserResource>(getUserResource(user));
}

因为我没有服务层,我的 Controller 为我做业务逻辑。现在我想实现服务层。我的 Controller 应该/不应该做什么?

我的服务层(我现在想实现)是否应该完成所有工作,而我的 Controller 只将请求委托(delegate)给服务层?

最佳答案

问问自己:如果我想为不同的 View /传输/协议(protocol)呈现结果,需要更改什么?那属于 Controller 。

Controller 层中的代码应该只与将服务层之间的业务输入/输出映射到 View /传输/协议(protocol)(视情况而定)有关。这可能(也可能不)包括将业务数据映射到 JSON(您的业务/服务层直接使用 JSON 或类似的东西并不是不合理的)、XML、HTML 或您的任何内容类型(对于 HTTP)。

虽然您的 Controller 可能感觉很轻,但请记住,Spring 对 Controller 的支持完成了大部分工作 - 将这样一个“简单”的 Controller 想象成一个 anchor ,您的框架可以识别并挂起所有较重的锅炉-盘子,代码关闭,对您有利。

关于java - 什么属于Controller层,什么属于Service层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42927114/

相关文章:

java - Spring boot中如何获取请求的url

java - buildr离线安装

spring - 使用 spring-kafka-test 无法启动测试(NoClassDefFoundError)

java - 如何对 void 方法进行 Junit 测试

java - 异步 RESTful Web 服务是否可行?

java - Android 中的 Post 请求 Spring Boot Rest 服务出现 I/O 错误

java - 接口(interface)的意图与具有抽象方法的抽象类有何不同?

java - 如何使用 Weld 轻松注入(inject)字符串常量?

Java 1.7 更新 45 - 无法运行未签名的 jar

rest - 本地依赖的 GCF 部署