我已经在我的泽西/弹簧应用程序的一部分中使用异常映射器,但由于某些原因它在其他部分不起作用,我不明白为什么,因为它以相同的方式实现。
我希望在抛出UserNameIsNotUnique
时抛出我自己的DataIntegrityViolationException
异常,它与异常映射器一起映射并返回一个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();
}
}
这就是Exception的样子。
public class UserNameIsNotUniqueException extends Exception{
public UserNameIsNotUniqueException(String msg, Exception e){
super(msg, e);
}
public UserNameIsNotUniqueException(String msg){
super(msg);
}
}
任何帮助,为什么这不起作用将不胜感激。
答案 0 :(得分:0)
问题是因为我没有使用jersey注册ExceptionMapper类。我用register()方法完成了这个。