gpt4 book ai didi

json - 在JSON中返回Jersey异常

转载 作者:行者123 更新时间:2023-12-04 13:16:56 25 4
gpt4 key购买 nike

以JSON格式返回Jersey异常的最佳方法是什么?
这是我的示例代码。

    public static class CompoThngExceptionMapper implements ExceptionMapper<Exception> {
@Override
public Response toResponse(Exception exception) {
if (exception instanceof WebApplicationException) {
WebApplicationException e = (WebApplicationException) exception;
Response r = e.getResponse();
return Response.status(r.getStatus()).entity(**HERE JSON**).build();
} else {
return null;

}
}

提前致谢!!!

最佳答案

取决于您要返回的内容,但我个人有一个类似于以下内容的ErrorInfo对象:

public class ErrorInfo {
final transient String developerMessage;
final transient String userMessage;

// Getters/setters/initializer
}

我将其作为 Exception的一部分传递,然后我只使用Jackson的 ObjectMapperErrorInfo中的 ExceptionMapper对象创建JSON字符串。这种方法的好处是您可以轻松扩展它,因此添加状态信息,错误时间等信息只是添加另一个字段的一种情况。

请记住,添加诸如响应状态之类的东西有点浪费,因为无论如何这都会返回到HTTP header 中。

更新

如下所示为一个完整的示例(在这种情况下,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\"}";
}
}
}

关于json - 在JSON中返回Jersey异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15111134/

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