【发布时间】:2017-10-15 17:18:38
【问题描述】:
我已经让异常映射器在我的球衣/弹簧应用程序的一部分中工作,但由于某种原因它在其他部分不起作用,我不明白为什么,因为它是以相同的方式实现的。
我希望在抛出 DataIntegrityViolationException 时抛出我自己的 UserNameIsNotUnique 异常,该异常使用异常映射器进行映射并返回 http 响应。
我已经用类似的代码让它在我的程序的其他部分工作,但由于某种原因,这个不能工作。我想知道它是否与DataIntegrityViolationException有关。
每当我使用非唯一用户名调用此方法时,都会抛出 UsernameIsNotUniqueException,但它似乎没有被映射,并且我得到的是 404 响应,而不是异常映射器中使用的响应。
这就是引发我想要映射的异常的方法。
public Employee createEmployee(String name, String email, String username, String password, double latvalue, double longvalue, String image, String street, String city, String country) throws ServiceException, UserDoesNotExistException, UserNameIsNotUniqueException, IllegalUserNameException {
log.info("createEmployee(): email: "+email);
Employee employee=null;
try {
if (userNameIsAReservedWord(username)) {
throw new IllegalUserNameException("This username is a reserved word: " + username);
}
employee = new Employee(name, email, username, latvalue, longvalue, image, street, city, country);
Employee savedEmployee = employeeRepository.save(employee);
employeeInfoService.createEmployeeInfo(savedEmployee.getId(), password);
return savedEmployee;
} catch (IllegalUserNameException e) {
log.warn("** SERVICE EXCEPTION ** FOR METHOD: createEmployee()");
e.printStackTrace();
throw e;
} catch (IOException e) {
log.warn("** SERVICE EXCEPTION ** FOR METHOD: createEmployee()");
e.printStackTrace();
throw new ServiceException("** SERVICE EXCEPTION ** FOR METHOD: createEmployee()", e);
}
catch(DataIntegrityViolationException e){
log.warn("** GENERAL EXCEPTION ** FOR METHOD: createEmployee()");
e.printStackTrace();
throw new UserNameIsNotUniqueException("A username that is already used was attempted to be created a profile with: "+username);
}
}
这就是异常映射器类的样子。
@Provider
public class UserNameIsNotUniqueExceptionMapper implements ExceptionMapper<UserNameIsNotUniqueException> {
@Override
public Response toResponse(UserNameIsNotUniqueException exception) {
return Response.status(Response.Status.EXPECTATION_FAILED)
.entity("Sombody is using this user name already, please select a unique username.").build();
}
}
这就是异常的样子。
public class UserNameIsNotUniqueException extends Exception{
public UserNameIsNotUniqueException(String msg, Exception e){
super(msg, e);
}
public UserNameIsNotUniqueException(String msg){
super(msg);
}
}
任何关于为什么这不起作用的帮助将不胜感激。
【问题讨论】: