Spring Controller设计模式继承?

时间:2018-01-24 14:29:44

标签: java spring maven inheritance

两个问题:

1

所有Controller都从MasterController扩展,并在每个@GetMapping中实现其抽象方法,以保持一致性。在每个@Controller中,我必须填充从MasterController继承的变量。无法保证我会一直做所有这些。一个捷径是从MasterController调用一个方法来填充所有方法。是否有可能在多个地方捕获相同的请求,因此我不需要每次都执行相同的方法,但它已完成"自动?

@SessionAttributes(value = {"user", "..."})
public abstract class MasterController<T>
{
    public Model MODEL;
    public HashMap<String, String> INCOMING_PARAMS;
    public RequestType REQUEST_TYPE;
    public User USER;

    public abstract T request(
            @ModelAttribute("user") User _user,
            @RequestParam HashMap<String, String> _params,
            Model _model,
            SessionStatus _sessionStatus,
            HttpServletRequest _request,
            HttpServletResponse _response);

    public String otherCommonFunction(String _a)
    {
        ...
    }   
}

@Controller
public class LoginController extends MasterController<String>
{
    @GetMapping(value = "/account-login-page")
    @Override
    public String request(
        @ModelAttribute("user") User _user,
        @RequestParam HashMap<String, String>  _params,
        Model _model,
        SessionStatus _sessionStatus,
        HttpServletRequest _request,
        HttpServletResponse _response)
    {
        USER = _user; //Do this every time
        REQUEST_TYPE = RequestType.GET; //Do this every time
        INCOMING_PARAMS = _params; //Do this every time
        MODEL = _model; //Do this every time

        ...

        return "..."
    }
}

2

如果一个@GetMapping中有多个@Controller,我怎样才能确保所有方法都具有完全相同的参数?抽象方法可以在子类中继承一次。可以只复制并粘贴它,但看起来不专业。这有什么解决方案吗?

0 个答案:

没有答案