Java 使用SpringMVC将许多参数从控制器传递到服务
我将MVC与spring一起使用,所以我想从我的控制器传递一些参数,这些字段来自我的提交表单,我的问题是传递这些字段、通过bean表单发送到服务或创建另一个bean的最佳方式Java 使用SpringMVC将许多参数从控制器传递到服务,java,spring,spring-mvc,Java,Spring,Spring Mvc,我将MVC与spring一起使用,所以我想从我的控制器传递一些参数,这些字段来自我的提交表单,我的问题是传递这些字段、通过bean表单发送到服务或创建另一个bean的最佳方式 @Autowired RegisterServiceImpl registerServiceImpl; @RequestMapping(value="/registeruser", method = RequestMethod.POST ) public String register(
@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使用最佳实践成功实现低耦合的一些替代方案。是否将发电机紧密耦合取决于您的用例。
RegisterServiceImpl#registerUser
是否在多个位置使用?RegisterForm
类型是否也会从重用中受益?如果是这种情况,则不应出现问题,您可以将RegisterForm
用作控制器内的命令对象。在此场景中,RegisterForm
实际上是一个DTO
但是,您可能会遇到这样的情况:
RegisterForm
包含其他永远不会来自视图的详细信息(可能由RegisterServiceImpl
中的其他方法使用),或者您需要对来自视图的数据执行某种转换/转换。如果基本上是这样,我通常会创建一个命令对象,然后将该对象中的信息转换为RegisterForm
的实例,然后将其传递到服务中。是否RegisterForm
会产生紧密耦合取决于您的用例。RegisterServiceImpl#registerUser
是否在多个位置使用?RegisterForm
类型是否也会从重用中受益?如果是这种情况,则不应出现问题,您可以将RegisterForm
用作控制器内的命令对象。在此场景中,RegisterForm
实际上是一个DTO
但是,您可能会遇到这样的情况:
RegisterForm
包含其他永远不会来自视图的详细信息(可能由RegisterServiceImpl
中的其他方法使用),或者您需要对来自视图的数据执行某种转换/转换。如果在很大程度上是这样,我通常会创建一个命令对象,然后将该对象的信息转换为RegisterForm
的实例,然后将其传递到服务中。RegisterForm确实是一个DTO,如前所述,您可能会遇到仅来自DTO的部分数据有用的情况,因此需要转换器
我建议使用弹簧提供的,您只需要注册自定义实现,对转换服务的一次调用就可以保持代码干净并与转换逻辑解耦。RegisterPerform确实是一个DTO,正如前面提到的,您可能会遇到这样的情况,即DTO中的部分数据很有用,因此需要转换器
我建议使用spring提供的功能,您只需注册自定义实现,对转换服务的一次调用就可以保持代码干净并与转换逻辑解耦。阅读数据传输对象(DTO)的概念。出于可测试性目的,您可能希望将您的服务对象声明为其接口类型
RegisterService
。请阅读数据传输对象(DTO)的概念。出于可测试性目的,您可能希望将您的服务对象声明为其接口类型RegisterService
。需要很多帮助,RegisterForm
仅用于使用此表单的注册用户。需要大量帮助,RegisterForm
仅用于使用此表单的注册用户。