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

时间:2017-03-06 14:34:46

标签: java spring-mvc controller javabeans

我有以下问题:我们使用Spring工具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
}

bean也只有两个字段 - 相应的电子邮件和验证码。验证码字段使用注释来检查它是否有效:

public class ResetPassCaptchaBean extends ResetPassBean {
    @CaptchaValid
    private String captcha;

    public void setCaptcha(String captcha) {
        this.captcha = captcha;
    }

    public String getCaptcha() {
        return captcha;
    }
}

public class ResetPassBean {

    private String email;

    public void setEmail(String email) {
        this.email= email;
    }

    public String getCaptcha() {
        return email;
    }
}

现在我们正在添加移动API,并且必须执行相同的过程,但不使用验证码验证。因此,我们只是简单地使用没有验证码字段的bean。由于验证码是使用bean中的注释验证的,因此它完全没有在控制器本身中使用,因此我们希望有相同的控制器来处理来自网站的请求和来自移动API。

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

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
}

所以问题是:留下两个相同的控制器还是有其他解决方案? 谢谢!

0 个答案:

没有答案