Java REST API:从 API 方法返回多个对象

Java REST API: Returning Multiple objects from API Method

我正在尝试 return 从 Java REST API 方法在 Eclipse 中使用 JAX-RS 的多个对象(例如字符串、布尔值、MyOwnClass 等)。

这是我现在拥有的:

我的API方法

@Path("/")
public class myAPI {

    @GET
    @Produces({ "application/xml", "application/json" })
    @Path("/getusers")
    public Response GetAllUsers() {

        //Data Type #1 I need to send back to the clients
        RestBean result = GetAllUsers();

        //Data Type #2 I need to send with in the response
        Boolean isRegistered = true;

        //The following code line doesn't work. Probably wrong way of doing it
        return Response.ok().entity(result, isRegistered).build();
    }
}

RestBean class:

public class RestBean {
    String status = "";
    String description = "";
    User user = new User();

   //Get Set Methods
}

所以我基本上发送两种数据类型:RestBeanBoolean

发回包含多个数据对象的 JSON 响应的正确方法是什么?

首先,Java 约定是 class 名称以大写字母开头,方法名称以小写字母开头。跟随他们通常是个好主意。

您需要按照@Tibrogargan 的建议将您的回复包装在一个 class 中。

public class ComplexResult {
    RestBean bean;
    Boolean isRegistered;

    public ComplexResult(RestBean bean, Boolean isRegistered) {
        this.bean = bean;
        this.isRegistered = isRegistered;
    }
}

然后你的资源看起来像...

public Response getAllUsers() {
    RestBean restBean = GetAllUsers();
    Boolean isRegistered = true;
    final ComplexResult result = new ComplexResult(bean, isRegistered);

    return Response.ok().entity(Entity.json(result)).build();
}

然而,您真正需要知道的是您的回复文档应该看起来是什么样的。您只能有一个响应文档 - 这就是包装器的用途 - 包装器的序列化方式会影响文档各部分的访问方式。

注意 - 您的资源被列为能够生成 XML 和 JSON,而我所做的仅适用于 json。您可以让框架为您完成所有内容协商的繁重工作,这可能是个好主意,只需从方法返回文档类型而不是 Response ...

public ComplexResponse getAllUsers() {
    ...
    return new ComplexResult(bean, isRegistered);