使用@Produces用于不同的方法

我正在学习Jersey webservices并且遇到了@Produces的用法,所以为了理解它,我写了一个这样的小程序:

 @Path("users/{username: [a-zA-Z][a-zA-Z_0-9]*}") public class UserResource { @GET @Produces("text/plain") public String getUser(@PathParam("username") String userName) { return "Hello " + userName; } @GET @Produces({"application/xml", "application/json"}) public String doGetAsXmlOrJson(@PathParam("username") String userName) { return "Hello World"; } } 

当我将请求作为http://localhost:9998/users/Java传递,并且标题为“Accept:application / json”时,我希望输出为Hello World 。 但不是这样,我将它作为Hello Java 。 我正在使用Chrome浏览器的Postman客户端对此进行测试。

现在如果我删除上面程序中的getUser方法,那么我得到输出为Hello World

你能否告诉我为什么即使我设置了Accept标头,请求也不会转到我的doGetAsXmlOrJson方法?

更新:添加更多详细信息 –

使用Jersey文档中提到的以下代码部署该程序:

 import java.io.IOException; import java.net.URI; import javax.ws.rs.core.UriBuilder; import org.glassfish.grizzly.http.server.HttpServer; import com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory; import com.sun.jersey.api.core.PackagesResourceConfig; import com.sun.jersey.api.core.ResourceConfig; public class Main { private static URI getBaseURI() { return UriBuilder.fromUri("http://localhost/").port(9998).build(); } public static final URI BASE_URI = getBaseURI(); protected static HttpServer startServer() throws IOException { System.out.println("Starting grizzly..."); ResourceConfig rc = new PackagesResourceConfig("com.examples.Jersey1"); return GrizzlyServerFactory.createHttpServer(BASE_URI, rc); } public static void main(String[] args) throws IOException { HttpServer httpServer = startServer(); System.out.println(String.format("Jersey app started with WADL available at " + "%sapplication.wadl\nTry out %shelloworld\nHit enter to stop it...", BASE_URI, BASE_URI)); System.in.read(); httpServer.stop(); } } 

这就是我使用Postman客户端测试的方式:

在此处输入图像描述

我不知道你可以为同一个@Path获得2个“@GET”。 我想人们可以假设jersey会根据“接受”标题将其路由到正确的方法。

我理解这是一个测试,但我不知道对象的文本表示有多大用处。

这是我使用@Produces的方式和时间

通常,我的Web服务将提供XML或JSON。 根据您的doGetAsXmlOrJson方法,任何典型的服务都会根据客户端的偏好(使用accept标头)生成两者

您不需要自己生成XML或JSON,只需返回POJO,Jersey将使用Jackson或Moxy(或您喜欢的泽西配置的JSON / XML提供程序)为您转换它,输出基于JSON或XML的你的“接受”标题。

有时,某些服务可能返回图像,pdf,甚至文本:) …在这些特殊情况下,我使用@Produces的其他可能值…

但我从来没有添加一个我需要自动JSON / XML编组或文本的情况。我想它可能对调试有用,但JSON和XML通常是人类可读的。