gpt4 book ai didi

json - 在 Jersey 中返回 JSON 或 XML 异常

转载 作者:行者123 更新时间:2023-12-03 03:40:21 25 4
gpt4 key购买 nike

我的目标是在未找到对象时在 404 错误上返回一个带有描述性消息的错误 bean,并返回所请求的相同 MIME 类型。

我有一个查找资源,它将根据 URI 返回 XML 或 JSON 中的指定对象(我已经设置了 com.sun.jersey.config.property.resourceConfigClass servlet 参数,因此我不需要 Accept header 。我的 JAXBContextResolver 在其类型列表中包含 ErrorBean.class,并且会为此类返回正确的 JAXBContext,因为我可以在日志中看到)。

例如:http://foobar.com/rest/locations/1.json

@GET
@Path("{id}")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Location getCustomer(@PathParam("id") int cId) {
//look up location from datastore
....
if (location == null) {
throw new NotFoundException("Location" + cId + " is not found");
}

}

我的 NotFoundException 看起来像这样:

public class NotFoundException extends WebApplicationException {

public NotFoundException(String message) {
super(Response.status(Response.Status.NOT_FOUND).
entity(new
ErrorBean(
message,
Response.Status.NOT_FOUND.getStatusCode()
)
.build());
}

}

ErrorBean如下:

@XmlRootElement(name = "error")
public class ErrorBean {

private String errorMsg;
private int errorCode;

//no-arg constructor, property constructor, getter and setters
...

}

但是,当我尝试此操作时,我总是收到 204 无内容 响应。我已经进行了一些修改,如果我返回一个字符串并指定 mime 类型,则效果很好:

public NotFoundException(String message) {
super(Response.status(Response.Status.NOT_FOUND).
entity(message).type("text/plain").build());
}

我还尝试返回 ErrorBean 作为资源。这工作正常:

{"errorCode":404,"errorMsg":"Location 1 is not found!"}

最佳答案

对于那些将来遇到类似问题的人......

结果我的代码最终没问题。我很抓狂,所以我重写了这个模块,但仍然没有任何进展。我的浏览器只会坐在那里并永远挂起。我开始使用 LiveHTTPHeaders(firefox 插件)检查 header ,并注意到何时发生这种情况 Content-Length 大于零。然后我用 hurl.it 进行测试发现 body 恢复正常了。浏览器可以很好地处理 XML 响应,但永远不会显示 JSON(因此会挂起)。这对于我的目的来说很好,因为这纯粹是一个供应用程序使用的 API,而不是供用户使用的。有关映射异常的信息,请访问 Jersey wiki .

HTTP/1.1 404 Not Found
Content-Type: application/json
Date: Fri, 21 May 2010 06:39:28 GMT
Server: Google Frontend
Cache-Control: private, x-gzip-ok=""
Transfer-Encoding: chunked

{
"errorCode": "404",
"errorMsg": "Could not retrieve entity of kind Location with key Location(10)"
}

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

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