Java 对不同的方法使用@products

Java 对不同的方法使用@products,java,web-services,jersey,Java,Web Services,Jersey,我正在学习Jersey webservices,并且偶然发现了@products的用法,因此为了理解它,我编写了一个如下的小程序: @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) {

我正在学习Jersey webservices,并且偶然发现了
@products
的用法,因此为了理解它,我编写了一个如下的小程序:

@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 "<text>Hello World</text>";
    }
}
以下是我使用Postman客户端进行测试的方式:


我不知道同一条@Path可以有2个“@GET”。我想可以假设jersey会根据“accepts”头将其路由到正确的方法

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

下面是我使用@products的方式和时间

通常,我的web服务将提供XML或JSON。 任何典型的服务都会根据客户机首选项(使用accept头)和doGetAsXmlOrJson方法生成这两者

您不需要自己生成XML或JSON,只需返回一个POJO,Jersey将使用Jackson或Moxy(或您最喜欢的JSON/XML提供者,配置为Jersey)为您进行转换,根据“accepts”头输出JSON或XML

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


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

您提供的代码无法再现此问题。我使用的是同一个版本(1.19-来自你的另一篇文章),我已经用Postman和cURL进行了测试。确保正确设置了Accept标头。如果您确定正确设置了标题,那么您就没有向我们显示真正的代码。在我看来,这两件事中只有一件可能是问题。@peeskillet,我已经用测试程序所需的所有信息更新了我的问题,请检查。您在image@peeskillet,是的,这解决了问题。我真的很抱歉,不知道我怎么错过了
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();
    }
}