2
這工作得很好:元素CXF返回列表
@GET
@Path("elements")
public List<Element> getElements(@HeaderParam(SESSION_TOKEN) String token) {
try {
if (token != null) {
Session session = new Session();
if (session.initWithToken(token)) {
ElementFacade sf = ElementFacade.getInstance();
return sf.getElements(session.getUser());
}
}
} catch (Throwable th) {
log.error("", th);
}
return new ArrayList<Element>();
}
我得到一個非常漂亮的JSON數組對象。
現在的問題是我喜歡將我的數據作爲有效負載放入響應中,以便能夠設置標題和狀態,並將錯誤對象作爲有效負載返回。 但它不起作用。
@GET
@Path("elements2")
public Response getElements2(@HeaderParam(SESSION_TOKEN) String token) {
try {
if (token == null) {
return ResponseFactory.createResponse(401, 4007);
}
Session session = new Session();
if (session.initWithToken(token)) {
ElementFacade sf = ElementFacade.getInstance();
return Response.status(200)
.header(Endpoint.SESSION_TOKEN, session.getToken())
.entity(sf.getElements(session.getUser())).build();
}
return ResponseFactory.createResponse(403, 4006);
} catch (InvalidTokenException e) {
return ResponseFactory.createResponse(401, 4005);
} catch (SessionTimeoutException e) {
return ResponseFactory.createResponse(401, 4004);
} catch (Throwable th) {
log.error("", th);
return ResponseFactory.createResponse(500, 5099);
}
}
麥16,2012下午7時○○分35秒org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor writeResponseErrorMessage Warnung:沒有消息體的作家已經發現了響應類的ArrayList。
如何使用與第二個函數中的第一個函數相同的現有功能?
我讀一些關於寫一個自己的MessageBodyWriter但在那類,我需要整個JSON寫入一個OutputStream,似乎是一個大量的工作和開銷...
在此先感謝
而不是所有這些,你可以在類級別有一個MessageContext對象並從那裏獲取HttpServletResponse對象。然後設置你想要的任何狀態碼,然後返回你的列表......狀態碼和標題將會一直出現 – Sikorski