Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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 SpringMVC,处理@service层中的错误并将它们发送到jsp_Java_Validation_Spring Mvc_Service_Multi Layer - Fatal编程技术网

Java SpringMVC,处理@service层中的错误并将它们发送到jsp

Java SpringMVC,处理@service层中的错误并将它们发送到jsp,java,validation,spring-mvc,service,multi-layer,Java,Validation,Spring Mvc,Service,Multi Layer,我在SpringMVC应用程序中寻找处理@service层错误验证的最佳方法 我有一个@Controller和一个@Service类 我的控制器: public String saveProduct(Product product) { myService.saveProduct(product); return "view"; } 我的服务: public void saveProduct(Product product) { // some validation h

我在SpringMVC应用程序中寻找处理@service层错误验证的最佳方法

我有一个@Controller和一个@Service类

我的控制器:

public String saveProduct(Product product) {
    myService.saveProduct(product);
    return "view";
}
我的服务:

public void saveProduct(Product product) {
    // some validation here
    myDao.save(product);
}
现在让我们假设验证会导致2到3个错误,颜色不合适,供应商现在无法交付产品,等等。。。我必须同时显示它们

如何将这些错误传输到控制器,然后传输到jsp?使用错误对象?包含所有这些错误的异常


我已经看过了,但我找不到一个方便的答案。我真的必须为每个错误创建未检查的异常吗?如果我有20或30个错误怎么办?

最后,我创建了一个自定义异常来处理功能错误:

public class ServiceException extends Exception {  
    private List<String> errors = new ArrayList<>();
    (...)
}

这是我能找到的最好的方法。如果有更好的建议,我洗耳恭听

最后,我创建了一个自定义异常来处理函数错误:

public class ServiceException extends Exception {  
    private List<String> errors = new ArrayList<>();
    (...)
}

这是我能找到的最好的方法。如果有更好的建议,我洗耳恭听

我会选择例外——这就是他们的目的。只需使用一些通用的异常类并传入消息,以显示在JSP中。无论您使用哪种方法,都需要对消息进行编码。如果同时显示3条错误消息,该怎么办?我必须抛出一个包含3条消息的异常吗?你为什么不使用JSR303或Springbean验证?例如,我已经在我的控制器中使用这两种格式进行表单验证,如姓名长度、电子邮件格式。。。。但在服务中,我必须进行额外的控制,如供应商可用性和其他东西。我在问题描述中给出的链接反映了我当前的情况。。。但我主要关心的是如何同时显示多条消息。我会考虑例外情况——这就是它们的用途。只需使用一些通用的异常类并传入消息,以显示在JSP中。无论您使用哪种方法,都需要对消息进行编码。如果同时显示3条错误消息,该怎么办?我必须抛出一个包含3条消息的异常吗?你为什么不使用JSR303或Springbean验证?例如,我已经在我的控制器中使用这两种格式进行表单验证,如姓名长度、电子邮件格式。。。。但在服务中,我必须进行额外的控制,如供应商可用性和其他东西。我在问题描述中给出的链接反映了我当前的情况。。。但我主要关心的是如何同时显示多条消息。我在自定义异常中添加了一个成员,该成员将保留一个错误标签。控制器在模型中添加错误标签。然后在JSP中解析标签。如果您想一次返回多个错误,您的解决方案听起来会更好。我想知道您是如何在exception对象中填充错误的?这是相当标准的,在ServiceException类中,您应该有public void addErrorString error之类的方法。这取决于你的需要。别忘了覆盖fillInStackTrace,这样你就不会。。。填充堆栈跟踪。。。我在自定义异常中添加了一个成员,该成员将保留一个错误标签。控制器在模型中添加错误标签。然后在JSP中解析标签。如果您想一次返回多个错误,您的解决方案听起来会更好。我想知道您是如何在exception对象中填充错误的?这是相当标准的,在ServiceException类中,您应该有public void addErrorString error之类的方法。这取决于你的需要。别忘了覆盖fillInStackTrace,这样你就不会。。。填充堆栈跟踪。。。
try {
    this.myService.myFunction(...);
} catch (final ServiceException e) {
    ValidationErrorsHelper.rejectErrors(result, e.getErrors());
}