对 servlet 的一个请求可以有两种类型的响应

One request to servlet that can have two types of response

我的服务器上有一个线程 运行(我正在使用 Tomcat 和 Java 文件),当用户发出请求时,服务器可以响应两种类型的响应取决于线程的状态。响应应该在 JSON 中,我正在使用 Jersey 库,Servlet 看起来像:

@GET
@Path("init")
@Produces(MediaType.APPLICATION_JSON)
public initResponse respondAsReady() {
    return initRes;
}

这只是一个示例,但问题是我仅限于使用一种类型的 JSON 响应(在本例中为 initResponse),但我需要能够 return另一种类型的响应(比如 initResponse2)是一种不同类型的 JSON。在其他情况下,我需要仅使用整数或 JSON 对象进行响应。那么我如何构建我的后端以便它可以处理请求和 return 两种可能的响应?

你拥有的每个端点都应该有@Consumes注解,这个注解定义了资源class或MessageBodyReader的方法可以接受的媒体类型,你也需要使用@Produces 这定义了资源 class 或 MessageBodyWriter 的方法可以产生的媒体类型

@GET
@Path("init")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public InitResponse respondAsReady() {
    return new InitResponse;
}

@GET
@Path("init")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
public String respondAsReady() {
    return new String("5");
}

使用此球衣select的方法基于请求中的接受header,因此请务必将其与您的请求一起发送。阅读此 link 以了解更多信息

如果您的客户端仅接受 'text/plain',将执行第二个端点。在 Accept header.

中刚刚超过这个值
@GET
@Path("init")
@Produces({MediaType.APPLICATION_JSON , MediaType.TEXT_PLAIN})
public Response respondAsReady() {
    if(/*condition*/)}
        //In case of a JSON response
        return Response.ok(json, MediaType.APPLICATION_JSON).build();
    }
    if(/*condition*/){
        //In case of an integer response
        return Response.ok(text, MediaType.TEXT_PLAIN).build();
    }
}