You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Controller中的数据写入逻辑迁移至UserService类?

解决Spring Boot中将数据库操作迁移至UserService的问题

我有一个包含username和email属性的User对象,现有MainController负责渲染user.html页面,页面包含两个输入框和一个按钮,点击按钮可将输入数据写入数据库,程序目前可正常运行,但希望将数据写入逻辑迁移至UserService类。

之前误以为MainController的usersShow方法参数为String类型,导致不知道如何给UserService的方法传递User类型参数,但实际上原代码中Controller的方法已经能正确接收User对象。


步骤1:完善UserService类,封装数据库操作逻辑

在UserService中添加处理数据库操作的方法,直接接收User类型参数,把原Controller中的数据操作逻辑迁移过来:

@Service
public class UserService {

    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // 保存用户的业务方法,封装数据库写入逻辑
    public void saveUser(User user) {
        userRepository.save(user);
    }

    // 如需查询所有用户,也可在此封装
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
}

步骤2:修改MainController,依赖UserService处理业务

移除MainController中对UserRepository的直接依赖,改为注入UserService,并调用其方法完成数据操作:

@Controller
@RequestMapping
public class MainController {

    private final UserService userService;

    @Autowired
    public MainController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping(path = "/users")
    public String usersPage(Model model) {
        model.addAttribute("user", new User());
        return "user";
    }

    @PostMapping(path = "/users")
    public String usersShow(@ModelAttribute("user") User user) {
        // 调用UserService方法获取所有用户
        System.out.println(userService.getAllUsers());
        // 调用UserService方法保存用户
        userService.saveUser(user);
        return "redirect:/users"; // 修正原代码中redirect路径不一致问题,与GetMapping路径保持统一
    }
}

关键说明

  • 原代码中@ModelAttribute("user")注解已经自动将表单提交的username、email数据绑定到User对象上,usersShow方法的参数本来就是User类型,不存在参数为String的问题,直接将该对象传入UserService的方法即可。
  • 改造后符合分层架构设计:Controller仅负责处理请求、视图跳转,Service层封装业务逻辑与数据操作,降低代码耦合度。

内容的提问来源于stack exchange,提问作者Maksim1251

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 02:50:27