2015-03-02 2 views
2

Извините за мой плохой английский. Я использую гризли и трикотаж для создания веб-приложения.ExceptionMapper не работает в гризли

И я реализую как этот

 ErrorModel errorModel = new ErrorModel("1", "1", "1"); 
     WebApplicationException applicationException = (WebApplicationException) exception; 
     return Response.status(applicationException.getResponse().getStatus()).type(MediaType.APPLICATION_JSON_TYPE).entity(errorModel).build(); 

Когда я посетил страницу, которая не существует. Я обнаружил, что он бросает исключение WebApplicationException. Итак, я отлаживаю и обнаружил, что этот метод вызывается и возвращает ответ выше. Но, наконец, ответ http - это html-страница, которая строится на гризли. Что мне делать

+0

Если это картограф хит, а затем между временем изначально вызовом этого метода ('toResponse') и через остальную часть цикла ответа, если другое исключение, он будет пузыриться до уровня контейнера, и контейнер будет обрабатывать исключение. Это защищает нас от бесконечных циклов. Это может быть то, что происходит. Возможно, есть какое-то исключение во время сериализации тела ответа. Кто знает. Просто догадка. Для лучшей помощи отправьте [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) –

ответ

5

Убедитесь, что у вас есть свойство RESPONSE_SET_STATUS_OVER_SEND_ERROR.

У меня была такая же проблема с гризли, что и улавливание моего захвата моего 400 и отправка по умолчанию общей страницы ошибок сервлета. Это решение для трикотажа 2.

public class RestApplication extends ResourceConfig { 

    private static final Logger logger = Logger.getLogger(RestApplication.class.getName()); 

    public RestApplication() { 
     // Set this property so that the 400 will still send the entity correctly. 
     property(ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR, "true"); 
     registerModules(); 
    } 
+0

Да, все хорошо, когда RESPONSE_SET_STATUS_OVER_SEND_ERROR установлен. Спасибо за peeskillet и вы. – user1896561

Смежные вопросы