java—创建一个resourceconfig,其行为方式与默认jetty的配置相同

mrfwxfqh  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(351)

我有一个端点:

@POST
@Path("/test")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String canaryTest(String JSON) {
    return JSON;
}

当我用泽西岛在码头登记的时候

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以使该行为继续工作(即,设置什么属性)
p、 s:我用的是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网站

ct3nt3jp

ct3nt3jp1#

我不知道你是怎么做到的

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-container-servlet-core 应该关掉 jersey-container-servlet . 前者用于2.5容器支持,但后者建议用于3.x容器。不过,以我为例,它没有任何效果
curl
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"}

相关问题