Я использую трикотаж для веб-служб REST.ExceptionMapper не работает как ожидалось
Я обрабатываю все 404 ответов, бросая NotFoundException (пакет com.sun.jersey.api) всякий раз, когда я не получаю никакого объекта из уровня сервиса.
например.
@GET
@Path("/{folderID}")
@Produces(MediaType.APPLICATION_JSON)
public Response getFolder(@PathParam("folderID") int folderID) {
.
.
.
Folder folderObj = folderService.getFolder(folderID);
if(folderObj == null){
throw new NotFoundException("Folder with ID '"+folderID+"' not found.");
}
}
Я написал ExceptionMapper для этого исключения.
@Provider
public class NotFoundExceptionMapper implements ExceptionMapper<NotFoundException> {
public Response toResponse(NotFoundException ex) {
ErrorMesage errorMessage = new ErrorMessage();
errorMessage.setCode(Status.NOT_FOUND.getStatusCode());
errorMessage.setMessage(ex.getMessage());
return Response.status(Status.NOT_FOUND)
.entity(errorMessage)
.type(MediaType.APPLICATION_JSON)
.build();
}
}
Итак Когда я подам неизвестную папку ID в качестве параметра путь, исключение, но код в NotFoundExceptionMapper не вызывается. (Я вижу сообщение об ошибке в ответе, но как «обычный текст», хотя в mapper я возвращаю ответ в JSON, а точка отладки также не попадает).
Кроме того, Above exception mappingper вызывается при вводе неправильного имени ресурса в URI, но не для неправильного параметра пути.
Я также добавил блок отображения исключений, как показано ниже, чтобы ответить на все остальные исключения.
public class GenericExceptionMapper implements ExceptionMapper<Throwable>{
public Response toResponse(Throwable ex) {
ErrorMessage errorMessage = new ErrorMessage();
errorMessage.setCode(Status.INTERNAL_SERVER_ERROR.getStatusCode());
errorMessage.setMessage(ex.getMessage());
return Response.status(errorMessage.getCode())
.entity(errorMessage)
.type(MediaType.APPLICATION_JSON)
.build();
}
Приведенный выше код вызывается всякий раз, когда любое исключение (кроме отображенных исключений) отбрасывается, и я получаю надлежащий ответ в формате JSON.
Так что же случилось с NotFoundException здесь? У меня есть об этом, и я также изучил источник NotFoundException, но не нашел ничего полезного, пожалуйста, помогите мне в этом.
Как вы регистрируете эти исключения? –
Не тестировались, но могут быть связаны с [this] (http://stackoverflow.com/q/29414041/2587435) ... Корреляция может быть найдена в [javavdoc] (https://jersey.java .net/apidocs/1.19/jersey/index.html? com/sun/jersey/api/NotFoundException.html) для NotFoundException, где сказано, что String arg является сущностью. –
Я пробовал в обоих направлениях. 1. Добавление аннотации @Provider 2. Регистрация ресурса в классе приложения –