我遇到了Dropwizard的问题,我无法捕获资源中Hibernate DAO对象抛出的异常。
我有以下DAO对象
public class ApplicantDAO extends AbstractDAO<Applicant>
{
public ApplicantDAO(SessionFactory factory)
{
super(factory);
}
public long create(Applicant person)
{
return persist(person).getApplicantId();
}
}
我从我的Dropwizard资源中调用create方法,我从我的应用程序运行方法中传递了我的托管DAO。以下不起作用:
try
{
long id = dao.create(applicant);
message += "[Stored: " + id + "] ";
}catch (HibernateException ex)
{
message +="Could't store: " + exptionToString(ex);
}
相反,我得到了Dropwizard&Jersey&#39的消息:
{"code":500,"message":"There was an error processing your request. It has been logged (ID a785167e05024c69)."}
有没有办法解决这个问题?
答案 0 :(得分:0)
我不熟悉Drop Wizard。
但我最好的客人是它注册了JAX-RS ExcepionMapper,在抛出异常时编写自己的错误
参见:javax.ws.rs.ext.ExceptionMapper
答案 1 :(得分:0)
我明白了。问题发生的原因是事务内部发生了异常抛出。
所以我没有在我的资源方法上使用@UnitOfWork,而是添加了@UnitOfWork(transactional = false)
然后我可以通过将SessionFactory传递给我的资源来管理我自己的事务,并且这样做了!
可能与以下问题有关:https://github.com/dropwizard/dropwizard/issues/949