有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java 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);
    }
}

2012年5月16日下午7:00:35组织。阿帕奇。cxf。jaxrs。拦截器。JAXRoutInterceptor writeResponseErrorMessage 警告:未找到响应类ArrayList的消息正文编写器

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

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

提前谢谢


共 (1) 个答案

  1. # 1 楼答案

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

    我试了很多,然后

    @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