Ich habe Exception Mapper in Teil meiner Trikot/Feder-Anwendung arbeiten, aber es funktioniert nicht in anderen Teilen aus irgendeinem Grund und ich don verstehe nicht warum, weil es auf die gleiche Weise umgesetzt wird.Exception Mapper funktioniert für einige Situationen in meinem Jersey/Frühling App, aber nicht in anderen
Ich möchte meine eigene UserNameIsNotUnique
Ausnahme ausgelöst werden, wenn DataIntegrityViolationException
ausgelöst wird, die mit Ausnahme Mapper zugeordnet ist und eine HTTP-Antwort zurückgibt.
Ich habe dies in anderen Teilen meines Programms mit ähnlichen Code arbeiten, aber aus irgendeinem Grund funktioniert dieser nicht. Ich frage mich, ob es etwas mit DataIntegrityViolationException
zu tun hat.
Immer wenn ich diese Methode mit einem nicht eindeutigen Benutzernamen aufrufen, wird UsernameIsNotUniqueException
ausgelöst, aber es scheint nicht zugeordnet werden, und ich bekomme eine 404
Antwort anstelle der Antwort, die in der Ausnahme Mapper verwendet wird.
So sieht die Methode aus, die die Ausnahme auslöst, die ich zuordnen möchte.
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);
}
}
So sieht die Exception-Mapper-Klasse aus.
@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();
}
}
So sieht die Ausnahme aus.
public class UserNameIsNotUniqueException extends Exception{
public UserNameIsNotUniqueException(String msg, Exception e){
super(msg, e);
}
public UserNameIsNotUniqueException(String msg){
super(msg);
}
}
Jede Hilfe, warum dies nicht funktioniert, würde sehr geschätzt werden.