Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring:在一个控制器中使用不同的bean_Java_Spring Mvc_Controller_Javabeans - Fatal编程技术网

Java Spring:在一个控制器中使用不同的bean

Java Spring:在一个控制器中使用不同的bean,java,spring-mvc,controller,javabeans,Java,Spring Mvc,Controller,Javabeans,我有以下问题:我们一直在使用Spring tools 3.8.3开发网站,其中一个选项是允许用户重置密码。为了做到这一点,他们需要指定他们的电子邮件地址并验证验证码。当这些步骤完成后,数据被发送到ResetPassword控制器,该控制器执行所有必要的检查和工作。控制器具有以下地址: website.com/path/resetPassword/ 并具有以下结构,其中它扩展了抽象控制器模板以定义输入和输出bean: @RequestMapping(path="website.com/path/

我有以下问题:我们一直在使用Spring tools 3.8.3开发网站,其中一个选项是允许用户重置密码。为了做到这一点,他们需要指定他们的电子邮件地址并验证验证码。当这些步骤完成后,数据被发送到ResetPassword控制器,该控制器执行所有必要的检查和工作。控制器具有以下地址:

website.com/path/resetPassword/
并具有以下结构,其中它扩展了抽象控制器模板以定义输入和输出bean:

@RequestMapping(path="website.com/path/resetPassword/",
                consumes = "application/JSON",
                produces = "application/JSON",
                method = "POST")
public class ResetPassController extends ControllerTemplate<ResetPassCaptchaBean, ResponseBean>{ 

// Autowired field declaration

// Couple of methods calling services
}
现在我们正在添加移动API,有必要执行相同的过程,但不使用验证码验证。因此,我们只是使用没有captcha字段的bean。由于captcha是使用bean中的注释进行验证的,因此控制器本身完全没有使用它,因此我们希望使用相同的控制器来处理来自web站点和移动API的请求

我知道可以创建两个不同的控制器并将所有实现移动到服务层(读取其他类),但是仍然会有两个相同的类,只有一行不同

public class ResetPassController extends ControllerTemplate<ResetPassCaptchaBean, ResponseBean>{
    //Autowiring same stuff

    //Calling same methods
}
公共类ResetPassController扩展ControllerTemplate{
//自动布线同样的东西
//调用相同的方法
}

公共类MobileSetPassController扩展控制器模板{
//自动布线材料
//调用相同的方法
}
所以问题是:把它留给两个相同的控制器,还是有其他解决方案?
谢谢

考虑实现一个既有resetbean又有resetpasscaptchBean的公共接口,然后将resetpasscaptchBean更改为ResetPassBean的修饰符,而不是子类化它。如果您不熟悉Decorator模式,这是一个非常直接的介绍:。完成后,两种类型的重置bean只需要一个控制器。谢谢您的建议!完全忘记了装饰师,我会尝试在这里使用它们
public class ResetPassController extends ControllerTemplate<ResetPassCaptchaBean, ResponseBean>{
    //Autowiring same stuff

    //Calling same methods
}
public class MobileResetPassController extends ControllerTemplate<ResetPassBean, ResponseBean>{
    //Autowiring stuff

    //Calling same methods
}