【问题标题】:Unable to find message body reader with content type application/json in Jersey Test Framework在 Jersey 测试框架中找不到内容类型为 application/json 的消息正文阅读器
【发布时间】:2017-04-18 12:12:09
【问题描述】:

我选择了 Jersey 测试框架来实现 REST 服务的单元测试用例。但是我在运行测试后遇到了以下问题。

注意:我什至将 resteasy-jackson-provider 添加到 pom 文件中,但无济于事。

这里是.pom文件依赖

<!-- jersey security dependency  -->
            <dependency>
                <groupId>org.glassfish.jersey.containers</groupId>
                <artifactId>jersey-container-servlet-core</artifactId>
                <version>${jersey.version}</version>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.media</groupId>
                <artifactId>jersey-media-multipart</artifactId>
                <version>${jersey.version}</version>
            </dependency> 

            <dependency>
              <groupId>org.glassfish.jersey.media</groupId>
              <artifactId>jersey-media-json-jackson</artifactId>
               <version>${jersey.version}</version>
            </dependency>
            <!-- jersey test framework dependency  -->

         <dependency>

          <groupId>org.glassfish.jersey.test-framework.providers</groupId>
          <artifactId>jersey-test-framework-provider-jetty</artifactId>
          <version>${jersey.version}</version>
          <scope>test</scope>
        </dependency>

        <dependency>
          <groupId>org.jboss.resteasy</groupId>
          <artifactId>resteasy-jackson-provider</artifactId>
          <version>2.3.4.Final</version>
       </dependency>

        <!--junit Dependency-->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <scope>test</scope>
        </dependency>

MockServices.Java

@Path("/hello")
public class MockServices {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/world")
    public DateVO getHello() {
        DateVO j=new DateVO ();
        j.setActive(true);
        return j;
    }
}

MockServicesTest.Java

    public class MockServicesTest extends JerseyTest {




        @Override
        protected Application configure() { 
            return new ResourceConfig(MockServices.class);
        }



        @Test
        public void test() {
            Response hello = target("/hello/world").request().get();
            System.out.println(hello.readEntity(String.class));//throw an above exception
        }

}

请告诉我如何解决这个问题。

【问题讨论】:

    标签: java junit jersey jersey-test-framework


    【解决方案1】:

    像这样覆盖你的提供者方法

    @Override
        protected Application configure() { 
           ResourceConfig config =new ResourceConfig(MockServices.class).register(JacksonFeature.class).register("Your ContextResolver<ObjectMapper> implementation class");
     return config;
        }
    

    【讨论】:

      【解决方案2】:

      我必须明确使用 Jersey 客户端实现来调用 REST 端点。

      @Test
       public void test() {
          final Client client = new JerseyClientBuilder().build();
          WebTarget target = client.target("http://localhost:9998");
          final Response response = 
          target.path("/hello/world").request().get();
          final String json = response.readEntity(String.class);
      
      }
      

      Reference

      【讨论】:

        猜你喜欢
        • 2013-12-15
        • 2014-03-20
        • 2015-06-04
        • 2016-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-26
        相关资源
        最近更新 更多