2016-06-07 2 views
0

Я разрабатываю API REST с помощью Google App Engine JAVA с Джерси и JAX-RS. Я хочу, чтобы иметь возможность отправлять собственные ошибки пользователей в формате JSON, для этого я использую javax.ws.rs.ext.ExceptionMapperФормат ошибки Google App Engine Джерси json

Все хорошо работает, когда я запустить приложение с Jetty на моей локальной машине, но когда я раскрываю в Google я получаю HTML по умолчанию 404 страница

Вот код ресурса:

@GET 
@Produces(MediaType.APPLICATION_JSON) 
@Path("{id}") 
public Customer getCustomer(@PathParam("id") String id) { 
    Customer customer = getCustomer(id); 
    if(customer == null) 
     throw new NotFoundException("Customer not found"); 
    return customer; 
} 

исключение картографа:

@Provider 
public class NotFoundExceptionMapper implements ExceptionMapper<NotFoundException> { 

@Override 
public Response toResponse(NotFoundException e) { 
    ErrorMessage errorMessage = new ErrorMessage(); 
    errorMessage.setErrrorMessage(e.getMessage()); 
    errorMessage.setResponseCode(404); 
    return Response.status(Response.Status.NOT_FOUND).entity(errorMessage).type(MediaType.APPLICATION_JSON_TYPE).build(); 
}  
} 

Я ожидаю для получения JSON-форматированного объекта ErrorMessage в качестве ответа, но все, что я получаю, это страница HTML 404 по умолчанию.

+0

Можете ли вы указать/вставить стек ошибок сервера? ли ваш код выбрасывает NotFoundException? – Vijay

+0

Ну Джерси ловит NotFoundException и сопоставляет его с HTTP 404ответ. Так что нет стека – Heigo

+0

Надеюсь, эта ссылка поможет вам http://stackoverflow.com/questions/26903729/how-to-handle-service-unavailable-scenarios-with-jersey-rest –

ответ

1

Недвижимость Джерси ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR до true.

Когда статус ответа 4xx или 5xx можно выбрать между sendError или setStatus на контейнерной конкретной Response реализации. Например. на контейнере сервлетов Джерси может звонить HttpServletResponse.setStatus(...) или HttpServletResponse.sendError(...).

Вызов sendError(...) метода обычно сбрасывает объект, заголовки ответа и обеспечивает страницу ошибки для указанного кода состояния (например, сервлет конфигурации ошибок страниц). Однако, если вы хотите выполнить постпроцессный отклик (например, с помощью сервлет-фильтра), единственный способ сделать это - вызвать setStatus(...) на объект Response объекта.

Если значение свойства истинно, используется метод Response.setStatus(...) по умолчанию Response.sendError(...).

Тип значения свойства имеет значение boolean. Значение по умолчанию - false.

Название свойства конфигурации: "jersey.config.server.response.setStatusOverSendError".

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