2

これは正常に機能します。

@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に書き込む必要があり、多くの作業とオーバーヘッドがあるようです...

前もって感謝します

4

1 に答える 1

1

とても簡単です。しかし、どのドキュメントにもそれは見つかりませんでした...

私はたくさん試した後、baammm ...

@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();
              List<Element> list = sf.getElements(session.getUser());
              return Response.status(200)
                      .header(Endpoint.SESSION_TOKEN, session.getToken())
                      .entity(new GenericEntity<List<Element>>(list) {}).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);
      }
}

それだけです...GenericEntityを作成するだけです...

于 2012-05-18T12:51:16.480 に答える