使用spring MVC将许多参数从控制器传递到服务

时间:2013-07-26 18:22:26

标签: java spring spring-mvc

我正在使用带弹簧的MVC所以我想从我的控制器传递一些参数,这个字段来自我的提交表单,我的问题是通过这个字段的最佳方式,通过bean表单发送到服务或创建另一个豆 。

    @Autowired
    RegisterServiceImpl registerServiceImpl;

    @RequestMapping(value="/registeruser", method = RequestMethod.POST )
    public String register( @ModelAttribute(value = "registerForm") RegisterForm registerForm , ModelMap model{

         //previous method extract each field from registerForm 
        //registerServiceImpl.registerUser(field1,field2,field3,fieldn);

        //actual method pass object registerForm
        registerServiceImpl.registerUser(registerForm);   

    }

问题是如果将RegisterForm传递给服务类产生高耦合? o使用最佳实践进行低成本耦合的一些替代方案。

2 个答案:

答案 0 :(得分:1)

RegisterForm确实是一个DTO,正如vivin-paliath提到的那样,你可能会在DTO的部分数据有用的情况下结束,因此需要转换器。

我建议使用spring提供的Converters,您只需要注册自定义实现,并且对转换服务的单个调用可以保持代码清洁并与转换逻辑分离。

答案 1 :(得分:0)

RegisterForm是否会产生紧耦合取决于您的用例。 RegisterServiceImpl#registerUser在多个地方使用了吗? RegisterForm类型也会从重用中受益吗?如果是这种情况,则不应存在问题,并且可以使用RegisterForm作为控制器中的命令对象。在这种情况下,RegisterForm实际上是DTO。

但是,您最终可能会遇到RegisterForm包含其他详细信息(可能由RegisterServiceImpl中的其他方法使用)的情况,这些细节永远不会来自视图,或者您需要执行某种操作翻译/转换来自视图的数据。如果主要是这种情况,我通常会创建一个命令对象,然后将该对象的信息转换为RegisterForm的实例,然后将其传递给服务。