目前我的注册情况如下:
(req.getMap() as Map).getDefaultCost()
在第一顺序中,我只对用户的两条消息(将成为public void signup(User newUser) throws Exception {
log.info("Sign up: " + newUser.getEmail());
if (restService.emailAlreadyExists(newUser.getEmail())) {
throw new Exception("Email already in use.");
}
List<Role> roles = new ArrayList<Role>();
roles = roleRepository.findAllOrderedByName();
roles.add(roleRepository.findByName("user"));
newUser.setRoles(roles);
newUser.setPassword(restService.getHashedValue(newUser.getPassword()));
try {
em.persist(newUser);
} catch (Exception e) {
throw new Exception("Just noobs use apps with less bugs. Try again. Now!");
}
log.info(newUser.toString());
userEvent.fire(newUser);
}
)感兴趣。为了防止用户发出其他含义消息,我甚至需要将FacesMessage
- 块扩展到角色。
嗯,我猜这是不好的做法。他们还说,他们还使用了通用的try
气味。但是:我在这段小代码中检测到以下记录的Exception
:
Exception
IllegalStateException
IllegalArgumentException
EntityExistsException
TransactionRequiredException
甚至没有谈到ObserverException
方法Exception
的八个(!)getSingleResult()
。
我是否应该真正处理此示例中的所有javax.persistence.TypedQuery
,或者可以跳过一些(和/或甚至可能使用上面的通用Exception
)。
答案 0 :(得分:0)
最佳做法是:单独捕获所有异常,并尽可能多地制作自定义日志消息。更容易理解错误的情况并采取相应的行动。
典型业务应用程序中的现实是:尝试对异常进行分组(例如,将由方法输入引起的所有可能异常分组,由db等引发的所有异常等)并了解有时您会将臭名昭着catch (Exception e)
或者使用通用消息重新抛出一般性异常......或者人们会开始称呼有关像大象一样成长的日志。