2017-08-28 147 views
0

我已经创建了基础知识库,它扩展了CrudRepository并标记为@NoRepositoryBean。我所有的其他库扩展BaseRepository覆盖弹簧数据保存方法

如何覆盖我的BaseRepository中的save方法以产生自定义错误消息?例如,我需要捕获所有DataIntegrityViolationException以在前端显示一些正确的消息。任何帮助赞赏。

UPDATE

例如,如果您创建春端点(@Endpoint),那么你可以创建一个实现org.springframework.ws.server.EndpointInterceptor一类,你可以监控所有的流量。是否有类似的课程可以监控所有与数据相关的流量?

+0

为什么你需要重写'save'方法呢?你可以在你的服务中做到这一点,或者只是使用一个方面为你做。 –

+0

在使用JPA时,通过覆盖save方法实际上是不可能的,因为保存可能永远不会被调用,并且在事务提交时抛出异常(冲刷EM) –

+0

如果我在我的服务中覆盖它,那么我必须为我拥有的每个存储库创建一项服务。也许我不必重写save方法,而是覆盖所有与存储库有关的流量的其他类。 – JamesLinux

回答

1

正如我的评论所述,重写'保存'将无法实现您的目标。 JPA可能会在你的代码中抛出异常。这是JPA的问题之一。

我想你可以覆盖Spring的一些中心方法来实现你的目标,但这并不是Spring的工作原理。

相反,您基本上注册了您的异常处理,它会在需要时由Spring调用。

an article about this by Baeldung,这看起来很有前途,并且被Google高估。

+0

非常感谢,这部分内容:“新的解决方案3 - 新的@ControllerAdvice(Spring 3.2及以上版本)”解决了我的问题。 – JamesLinux