gpt4 book ai didi

java - 从服务层到前端的java消息传递有哪些选项

转载 作者:行者123 更新时间:2023-12-01 04:25:42 25 4
gpt4 key购买 nike

因此,在我的服务层中,我有一些执行某些操作的逻辑。有时它必须在执行之前检查某件事是否可行,或者它只需要从前端获得一些确定信息(“您确定要这样做吗?”之类的东西)。当然,前端会向屏幕发送事务以获取信息。

过去我为此使用过 RuntimeExceptions。我会抛出一个

new MessageException("are.you.sure");

然后 Controller 级别将执行

try{
theService.doSomething();
}catch(MessageException me) {
model.addAttribute(me.getMessageKey());
result.addError(new ObjectError());
}

在另一个应用程序中,我创建了一个 PostOffice 对象,并将信件等放入其中作为消息。它非常精致且非常好,但我的新应用程序要小得多,我不想要这一切。

所以我正在寻找一些最佳实践。你们如何从服务层向前端发送消息?请记住,我不是在谈论异常!我只是在谈论来自服务层的消息。

最佳答案

Spring MVC 的一个优点是异常处理。由于 DispatcherServlet 有一个 try-catch(Exception) 包装处理程序方法(即您的 Controller 方法),因此它可以捕获所有抛出的异常并使用 处理它们@ExceptionHandler 方法或其他一些构造(有替代方案)。

我开始做的是让我的 Service 方法仅抛出 RuntimeException 实例(与 @Transactional 配合良好)并定义我的所有 @ExceptionHandler @ControllerAdvice 带注释的类中的 code> 方法。像这样的东西:

@ControllerAdvice
public class ControllerHandler {
private static final Logger logger = LoggerFactory.getLogger(ControllerHandler.class);

@ExceptionHandler(value = AuthenticationException.class)
public String handleAuthenticationException(AuthenticationException e) {
if (logger.isInfoEnabled()) {
logger.info("An AuthenticationException occurred: {}", e.getMessage());
}

return "redirect:/";
}

...more
}

@ExceptionHandler 带注释的方法有一些规则,但非常可定制。您可以在javadoc中看到所有可能性。这里。您还应该看看 ResponseStatus .

就我个人而言,我很少从服务层抛出已检查的异常。唯一经常出现的是IOException(解析JSON,打开文件),甚至我喜欢将其包装在RuntimeException中,因为它不像我可以做任何特别的事情就在那个水平。

关于java - 从服务层到前端的java消息传递有哪些选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18514560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com