Spring 模型/控制器MVC中的异常处理

Spring 模型/控制器MVC中的异常处理,spring,exception,spring-mvc,model-view-controller,exception-handling,Spring,Exception,Spring Mvc,Model View Controller,Exception Handling,我最近刚刚开始学习MVC模式,最初是在android中,但现在是在SpringMVC框架中。我想知道在模型或控制器中进行测试/异常处理是否更合适。我的意思是,假设我在模型中有一个字段,它应该被限制为一些值,或者一系列值;我应该测试输入并在模型中抛出异常,让控制器捕捉它们,还是在将输入转发到模型之前,控制器应该自己检查输入 我担心在控制器中进行测试可能需要检查几个点的值,而如果在模型中进行测试,则只能在一个位置进行。我对检查模型中的输入的担心是,出于某种原因,这对我来说真的很奇怪;我对这个模式还是

我最近刚刚开始学习MVC模式,最初是在android中,但现在是在SpringMVC框架中。我想知道在模型或控制器中进行测试/异常处理是否更合适。我的意思是,假设我在模型中有一个字段,它应该被限制为一些值,或者一系列值;我应该测试输入并在模型中抛出异常,让控制器捕捉它们,还是在将输入转发到模型之前,控制器应该自己检查输入

我担心在控制器中进行测试可能需要检查几个点的值,而如果在模型中进行测试,则只能在一个位置进行。我对检查模型中的输入的担心是,出于某种原因,这对我来说真的很奇怪;我对这个模式还是新手,所以我还不知道

什么是标准?推荐什么


感谢大家

在模型和控制器中进行测试和/或异常处理是合适的,这是最适合处理异常的

private String blammyValue;

public int getBlammyAsInt()
{
    int returnValue;

    try
    {
        returnValue = Integer.parseInt(blammyValue);
    }
    catch (NumberFormatException exception)
    {
        returnValue = -1; // some default value
    }

    return returnValue;
}
例如,如果要从字符串中解析数字,并在字符串不包含数字且正在模型中解析时使用默认值,则应在模型中处理numberformatexception。 我认为这是一个“预期”的例外

private String blammyValue;

public int getBlammyAsInt()
{
    int returnValue;

    try
    {
        returnValue = Integer.parseInt(blammyValue);
    }
    catch (NumberFormatException exception)
    {
        returnValue = -1; // some default value
    }

    return returnValue;
}
如果例外是不寻常的事情, 就像一个数据库例外, 没有合理的违约行为,
然后在控制器中捕获它是有意义的。

您的意思是,如果异常类似于数据库异常,请将异常从模型重新发送到控制器??不,只是不要在模型中捕获它,让它在控制器中捕获。谢谢您的回答dwb,我还有一个问题,如果我在控制器中捕捉到异常,这意味着我必须在控制器中检测并写入日志(logget.error(“database open”,ex)),而不是在模型中,对吗?日志记录是一个有趣的问题。您应该在对应用程序有意义的地方记录异常;这可能意味着在模型中进行日志记录。如果您正在登录模型,您将捕获异常以记录它,然后(可能)将相同的异常重新发送到控制器。登录模型意味着您应该能够访问有助于清除日志消息的数据(甚至可能只是模型方法名称)。