gpt4 book ai didi

java - Jersey/Jax-RS 如何在资源中选择正确的方法

转载 作者:搜寻专家 更新时间:2023-11-01 03:34:06 24 4
gpt4 key购买 nike

我正在为 API 服务器使用最新版本的 Jersey。我定义了下一个资源:

@javax.ws.rs.Path("/myPath")
public class MyResource {

@GET
@Consumes({MediaType.WILDCARD, MediaType.TEXT_PLAIN, MediaType.TEXT_HTML})
@Produces(MediaType.TEXT_PLAIN)
public Response method1(@Context Request request) {
}

@GET
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public MyObject method2() {}

}

现在假设我正在使用下一个 header 调用此资源:

<header>
<name>Accept</name>
<value>text/html, application/xhtml+xml, */*</value>
</header>

在没有方法 Producer 注释匹配的情况下,Jersey 如何知道要匹配哪一个?我问是因为有一次服务器响应了 method2 并且在重新启动它之后,它响应了 method1。

最佳答案

<header>
<name>Accept</name>
<value>text/html, application/xhtml+xml, */*</value>
</header>

我不知道那是什么; header 未以 XML 格式发送,但假设您正确发送了 header ,下面是它的分解方式。

@Produces 处理 Accept header ,而 @Consumes 处理客户端 Content-Type header ,当客户端发送数据。那么让我们看看你的两个 @Produces 注释,针对 Accept header

@Produces(MediaType.TEXT_PLAIN)
public Response method1() {}

@Produces(MediaType.APPLICATION_JSON)
public MyObject method2() {}

text/html, application/xhtml+xml, */*

所以他们都没有 text/html,所以把它划掉。它们都没有application/xhtml+xml,所以把它划掉。那只剩下 */*,意思是“随便发给我”。 所以 Jersey 可以自由选择哪一个。结果是不可预测的。您不能对此做出任何假设。那是客户的错。不是我们的。客户端应发送正确的 header 。或者我们应该更好地记录我们的 API,这样客户就知道我们可以生产什么类型 :-)

关于java - Jersey/Jax-RS 如何在资源中选择正确的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37037270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com