Зависит от того, что вы хотите, чтобы вернуться, но лично у меня есть ErrorInfo
объекта, который выглядит примерно так:
public class ErrorInfo {
final transient String developerMessage;
final transient String userMessage;
// Getters/setters/initializer
}
который я огибаю как часть моих Exception
с, то я просто использовать Джексон ObjectMapper
для создайте строку JSON из объекта ErrorInfo
в ExceptionMapper
. Хорошая вещь с этим подходом заключается в том, что вы можете расширить его очень легко, поэтому добавление информации о состоянии, времени ошибки, как бы то ни было, - это просто случай добавления другого поля.
Имейте в виду, что добавление таких вещей, как состояние ответа, является немного ненужным, так как это все равно будет возвращаться в HTTP-заголовке.
Update
Полный пример следующим образом (в данном случае ErrorInfo имеет несколько полей в нем, но вы получите общее представление):
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@Provider
public class UnexpectedExceptionMapper implements ExceptionMapper<Exception>
{
private static final transient ObjectMapper MAPPER = new ObjectMapper();
@Override
public Response toResponse(final Exception exception)
{
ResponseBuilder builder = Response.status(Status.BAD_REQUEST)
.entity(defaultJSON(exception))
.type(MediaType.APPLICATION_JSON);
return builder.build();
}
private String defaultJSON(final Exception exception)
{
ErrorInfo errorInfo = new ErrorInfo(null, exception.getMessage(), exception.getMessage(), (String)null);
try
{
return MAPPER.writeValueAsString(errorInfo);
}
catch (JsonProcessingException e)
{
return "{\"message\":\"An internal error occurred\"}";
}
}
}
Thanks jgm. Сожалею. Как вы кодируете «ObjectMapper» Jacson для создания строки JSON из объекта 'ErrorInfo' в' ExceptionMapper' ???. Заранее спасибо –
Добавлен полный пример. – jgm
Только последний вопрос jgm. Я в среде Jetty - Jersey, и я всегда получаю null в exception.getMessage(). Я хочу только вернуть описание статуса. Заранее спасибо. –