これは正常に機能します。
@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);
}
}
Mai 16、2012 7:00:35 PM org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor writeResponseErrorMessage警告:応答クラスArrayListのメッセージ本文ライターが見つかりません。
2番目の関数の最初の関数で機能するのと同じ既存の機能をどのように使用できますか?
私は独自のMessageBodyWriterを書くことについて何かを読みましたが、そのクラスではJSON全体をOutputStreamに書き込む必要があり、多くの作業とオーバーヘッドがあるようです...
前もって感謝します