У меня есть интерфейс REST, реализованный с использованием javax для входа в систему пользователя.
@Path("/login")
@GET
@Produces(MediaType.APPLICATION_JSON)
public UserId login(@QueryParam("email") String email, @QueryParam("password") String password) throws InvalidUserDataException {
User user;
try {
user = loadUserFromDatabase(null, email);
} catch (MissingDatabaseEntryException e) {
e.printStackTrace();
throw new InvalidUserDataException("Email and password do not match.");
}
if(!user.confirmed)
throw new InvalidUserDataException("We have sent you a confirmation mail. Please confirm your email first.");
if(!user.password.equals(password))
throw new InvalidUserDataException("Email and password do not match.");
return new UserId(user.userId);
}
Кроме того, есть Exception Mapper
для сопоставления сгенерированных исключений с конкретным ответом HTTP.
@Provider
public class InvalidUserDataExceptionHandler implements ExceptionMapper<InvalidUserDataException> {
@Override
public Response toResponse(InvalidUserDataException exception)
{
return Response.status(Response.Status.CONFLICT).entity(exception.getMessage()).build();
}
}
Независимо от того, какую ошибку я выдаю и какой код состояния я определяю в классе картографа, сервер всегда отвечает просто 500 Internal Server Error вместо этого с определенным 409. Знает ли кто-нибудь, что мне здесь не хватает?Заранее спасибо.