Java CXF返回元素列表

Java CXF返回元素列表,java,cxf,jax-rs,Java,Cxf,Jax Rs,这很好: @GET @Path("elements") public List<Element> getElements(@HeaderParam(SESSION_TOKEN) String token) { try { if (token != null) { Session session = new Session(); if (session.initWithToken(token)) {

这很好:

@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>();
}
Mai 1620127:00:35 PM org.apache.cxf.jaxrs.interceptor.jaxroutinterceptor writeResponseErrorMessage 警告:未找到响应类ArrayList的消息正文编写器

如何使用与第二个函数中的第一个函数相同的现有功能

我读过一些关于编写自己的MessageBodyWriter的文章,但是在这个类中,我需要将整个JSON写入一个OutputStream,这似乎是一个很大的工作量和开销


提前谢谢

这太容易了。但是在任何文档中都没有找到它

我试了很多,然后

@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);
      }
}
@GET
@路径(“元素2”)
公共响应getElements2(@HeaderParam(会话令牌)字符串令牌){
试一试{
if(标记==null){
返回ResponseFactory.createResponse(4014007);
}
会话=新会话();
if(session.initWithToken(令牌)){
ElementFacade sf=ElementFacade.getInstance();
List List=sf.getElements(session.getUser());
返回响应。状态(200)
.header(Endpoint.SESSION_令牌,SESSION.getToken())
.entity(新泛型实体(列表){}).build();
}
返回ResponseFactory.createResponse(4034006);
}捕获(InvalidTokene异常){
返回ResponseFactory.createResponse(4014005);
}捕获(SessionTimeoutException e){
返回ResponseFactory.createResponse(4014004);
}捕获(可丢弃){
日志错误(“,th);
返回ResponseFactory.createResponse(5005099);
}
}

就这样。。。您只需要创建一个GenericEntity…

而不是所有这些,您可以在类级别拥有一个MessageContext对象,并从中获取HttpServletResponse对象。然后设置您想要的任何状态代码并返回您的列表。。。状态代码和标题将随之显示
@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);
      }
}