2017-10-15 2 views
0

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.

Antwort

0

Das Problem, dass ich die ExceptionMapper-Klasse nicht mit Jersey registriert. Ich habe das mit der Methode register() gemacht.

Verwandte Themen