0
我在服务器端使用了ExceptionMapper
,将自定义异常放在响应的正文中。我如何在客户端检索原始异常并将其发送给调用者?如何从泽西岛检索映射的异常?
我在服务器端使用了ExceptionMapper
,将自定义异常放在响应的正文中。我如何在客户端检索原始异常并将其发送给调用者?如何从泽西岛检索映射的异常?
可以序列异常,并把它作为响应的一部分:
public final class SerializingExceptionMapper implements ExceptionMapper<Exception> {
@Override
public Response toResponse(Exception exception) {
try {
final byte[] serializedException = serializeException(exception);
final String base64EncodedException = Base64.getEncoder().encodeToString(serializedException);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(new Message(base64EncodedException))
.build();
} catch (Exception ex) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
private byte[] serializeException(Exception ex) throws IOException {
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
final ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(ex);
oos.close();
return bos.toByteArray();
}
}
final class Message {
public Message(String exception) {
this.exception = exception;
}
public String exception;
}
然后在客户端,你应该做的正好相反:
byte[]
ByteArrayInputStream
ObjectInputStream
readObject()
任何你想让它在客户端PS异常
byte[]
s) - >只需使用StreamingOutput
作为.entity()
并写入提供的输出流而不是ByteArrayOutputStream
。这同样适用于客户端的反序列化。
这正是我最终做的。我有一个服务定位器,可以捕获这些呼叫,但我期望在客户端可以使用某种泽西映射器来轻松完成。过滤器也不好,我不能抛出异常。 – MarcioB