Whi*_*cal 4 java json jetty jax-rs jersey
我有一个端点:
@POST
@Path("/test")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String canaryTest(String JSON) {
return JSON;
}
Run Code Online (Sandbox Code Playgroud)
当我使用Jersey在Jetty中注册时
ServletHolder holder = new ServletHolder(new ServletContainer());
Run Code Online (Sandbox Code Playgroud)
一切似乎都很好.但是,如果我尝试明确指定默认配置,它将停止工作(从端点返回媒体类型错误).即使只是将ResourceConfig的默认实例传递给ServletContainer,它也会停止工作.
ResourceConfig config = new ResourceConfig();
//config.property(x,defaultX)
//config.property(y,defaultY)
ServletHolder holder = new ServletHolder(new ServletContainer(config));
Run Code Online (Sandbox Code Playgroud)
我想手动和显式地模拟默认配置行为,所以我在这里要问的是我应该如何配置ResourceConfig以使行为保持工作(即,要设置的属性)
PS:我正在使用Jetty 9.2.6.v20141205和Jersey 2.14.Maven中的依赖关系:
我不知道你是如何工作的
ServletHolder holder = new ServletHolder(new ServletContainer());
Run Code Online (Sandbox Code Playgroud)
我无法生成一个简单的实例化的工作示例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();
}
}
Run Code Online (Sandbox Code Playgroud)
使用所有依赖项,排除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;
}
}
Run Code Online (Sandbox Code Playgroud)
在jetty.practice.resources包中.
我很好奇,看看如何在没有它的情况下让它工作 ResourceConfig
我应该提到的另一件事是jersey-container-servlet-core应该换掉jersey-container-servlet.前者用于2.5容器支持,但后者推荐用于3.x容器.用我的例子来说,它没有任何影响
卷曲
C:\>curl http://localhost:8080/test -X POST -d "{\"hello\":\"world\"}" -H "Content-Type:application/json"
world
C:\>curl http://localhost:8080/test
{"hello":"world"}