在我的 JAXRS 应用程序中,当许可证无效时,我会发出 LicenseKeyException。该异常被 ExceptionMapper 捕获,该异常映射器通过 403 状态代码响应调用者,实体持有一些我想随状态一起发送的额外信息。
但是在我的 javascript 客户端上,在 XMLHttpRequest 中,我只得到状态,而不是响应。
Java 代码
@Provider
public class LicenseKeyExceptionMapper implements ExceptionMapper<LicenseKeyException> {
@Override
public Response toResponse(final LicenseKeyException exception) {
return Response
.status(Response.Status.FORBIDDEN)
.entity(exception.getMessage()) // I want this to be available to the javascript caller
.build();
}
}
Javascript代码
let xhr = new XMLHttpRequest();
xhr.open(opt.method, makeActuelURL(opt.url), true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("licenseKey", opt.licenseKey);
let json = JSON.stringify({...opt, charsetName: "utf-8"});
xhr.responseType = "json";
xhr.onload = () => {
if (xhr.status === 200)
resolve(xhr);
else
reject(makeError(xhr));
};
xhr.onerror = () => reject(makeError(xhr));
xhr.send(json);
当状态不是 200(我尝试了 500 和 403)时,xhr 对象中的响应字段为空。我期待找到我认为我在 Java 代码中放入的实体。
我做错了什么?