Java 创建一个ResourceConfig,其行为方式与默认Jetty';s泽西岛注册
我有一个端点:Java 创建一个ResourceConfig,其行为方式与默认Jetty';s泽西岛注册,java,json,jersey,jetty,jax-rs,Java,Json,Jersey,Jetty,Jax Rs,我有一个端点: @POST @Path("/test") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public String canaryTest(String JSON) { return JSON; } 当我用Jersey在Jetty注册时 ServletHolder holder = new ServletHolder(new ServletContainer());
@POST
@Path("/test")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String canaryTest(String JSON) {
return JSON;
}
当我用Jersey在Jetty注册时
ServletHolder holder = new ServletHolder(new ServletContainer());
一切似乎都很好。
但如果我试图明确指定默认配置,它将停止工作(从端点返回媒体类型错误)。即使只是将ResourceConfig的默认实例传递给ServletContainer,它也会停止工作
ResourceConfig config = new ResourceConfig();
//config.property(x,defaultX)
//config.property(y,defaultY)
ServletHolder holder = new ServletHolder(new ServletContainer(config));
我想手动和显式地模拟默认配置行为,因此我在这里要问的是如何配置ResourceConfig以使该行为保持工作(即,设置什么属性)
注:我使用的是Jetty 9.2.6.v20141205和Jersey 2.14。
Maven中的依赖项:
- org.eclipse.jetty.jetty-server org.eclipse.jetty.jetty-servlet
- org.eclipse.jetty.jetty-servlets
- org.glassfish.jersey.containers.jersey-container-servlet-core
- com.sun.jersey.jersey-json
- org.glassfish.jersey.media.jersey-media-json-jackson
我不知道你是怎么做到的
ServletHolder holder = new ServletHolder(new ServletContainer());
我无法简单地实例化ServletContainer()
,生成一个工作示例。虽然我正要让它使用以下代码
public class TestJerseyServer {
public static void main(String[] args) throws Exception {
ResourceConfig config = new ResourceConfig();
config.packages("jetty.practice.resources");
ServletHolder jerseyServlet
= new ServletHolder(new ServletContainer(config));
Server server = new Server(8080);
ServletContextHandler context
= new ServletContextHandler(server, "/");
context.addServlet(jerseyServlet, "/*");
server.start();
server.join();
}
}
使用所有依赖项,不包括com.sun.jersey:jersey json
,因为它不是必需的。没有其他配置。资源类
@Path("test")
public class TestResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getTest() {
Hello hello = new Hello();
hello.hello = "world";
return Response.ok(hello).build();
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response postHello(Hello hello) {
return Response.ok(hello.hello).build();
}
public static class Hello {
public String hello;
}
}
在jetty.practice.resources
包中
我很想知道,没有ResourceConfig
我应该提到的另一件事是
jersey容器servlet核心
应该切换到jersey容器servlet
。前者用于2.5容器支持,但后者建议用于3.x容器。不过,以我的例子来说,它没有任何效果
卷曲
C:\>curlhttp://localhost:8080/test -X POST-d“{\“hello\”:“world\”}“-H”内容类型:application/json“
world
C:\>curlhttp://localhost:8080/test
{“你好”:“世界”}
你能用POST和@Consumes(JSON)试试吗?我不知道该怎么做,但我确信org.eclipse.jetty.servlet.ServletHolder=new org.eclipse.jetty.servlet.ServletHolder(new org.glassfish.jersey.servlet.ServletContainer())正在为我编译并启动服务器:)。也许这就是问题所在,内部?1)是的,我会试试。2) 启动服务器,但是你能找到你的资源吗?很有趣。你说得对,它不起作用。让我调查一下,我收回这句话。我在
内容类型
标题上有一个typeo:-D,但它与post-alsoon配合得很好。我可以看到,在您的案例中,如果您有一个webapp结构,如前所述,它将在隐式创建的资源配置
上有一些初始配置。但在一个独立的结构中,我看不出这些规则将如何应用。这就是我困惑的地方。这就是为什么我说我很想看看你的代码/配置/结构或任何能帮助我理解的东西(更多的是为了我的利益,而不是你的:-)