简体   繁体   English

CXF返回元素列表

[英]CXF return list of elements

This works fine: 这很好用:

@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>();
}

I get a very nice JSON array with objects. 我得到一个带有对象的很好的JSON数组。

The Problem is now I like to put my data as payload into a Response, to be able to set headers and status and to alternatively return an error object as payload. 现在的问题是,我想将数据作为有效负载放入响应中,以便能够设置标头和状态并可以选择将错误对象作为有效负载返回。 But it doesn't work. 但这是行不通的。

@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 Warnung: No message body writer has been found for response class ArrayList. Mai 16,2012 7:00:35 PM org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor writeResponseErrorMessage警告:尚未找到响应类ArrayList的消息正文编写器。

How can I user the same existing functionality that works for the first function in the second function? 如何使用与第二个功能中第一个功能相同的现有功能?

I read something about writing an own MessageBodyWriter but in that class I need to write the whole JSON into an OutputStream and seems to be a lot work and overhead... 我读了一些有关编写自己的MessageBodyWriter的内容,但是在该类中,我需要将整个JSON写入OutputStream中,这似乎需要大量工作和开销。

Thanks in advance 提前致谢

It's so damn easy. 真是太容易了。 But haven't found it in any documentation... 但尚未在任何文档中找到它...

I tried a lot and then baammm... 我尝试了很多,然后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);
      }
}

That's it... You only need to create a GenericEntity... 就这样...您只需要创建一个GenericEntity ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM