gpt4 book ai didi

java - 从过滤器序列化 Jersey 异常会引发错误

转载 作者:行者123 更新时间:2023-11-30 04:32:54 26 4
gpt4 key购买 nike

我目前有一个运行 Jersey 的 RESTful Web 服务。我最近添加了一个过滤器,可以执行一些身份验证操作,并且它可以在快乐路径的情况下工作。但是,当我需要从此过滤器中抛出错误时,它不会将异常序列化为漂亮的 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 类型?

最佳答案

您需要构建一个异常映射器来处理异常并将其转换为 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() + "\"}";
}
}

关于java - 从过滤器序列化 Jersey 异常会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14200184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com