我目前有一个运行Jersey的RESTful Web服务。我最近添加了一个过滤器来做一些auth的东西,它适用于happy-path的情况。但是,当我需要从此过滤器中抛出错误,而不是将异常序列化为一个漂亮的json字符串时,它会抛出500并出现以下错误:
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message
body writer for Java class myclass, and Java type class myclass, and MIME media type
application/octet-stream was not found
问题是,我不想给application / octet-stream写任何东西。我的服务仅使用application/json
。这在我的实际Resource
类中不是问题,我可以在其中指定@Produces
注释。从资源主体抛出的错误响应将正确序列化。
我的问题是:如何控制在过滤时抛出的异常使用的MIME类型?
答案 0 :(得分:2)
您需要构建一个exceptionmapper来处理异常并将它们转换为JSON。类似的东西:
@Provider
public class UnexpectedExceptionMapper implements ExceptionMapper<Exception>
{
@Override
public Response toResponse(final Exception exception)
{
ResponseBuilder builder = Response.status(Status.BAD_REQUEST)
.entity(jsonError(exception))
.type(MediaType.APPLICATION_JSON);
return builder.build();
}
private String jsonError(final Exception exception)
{
return "{\"error\":\"" + exception.getMessage() + "\"}";
}
}