javax.ws.rs.ProcessingException : could not find writer for content-type application/json

标签 java web-services rest jboss resteasy

我是 REST 网络服务的新手。我正在尝试如下所示的@post 和@consumes 注释

@POST
@Path("/post")
@Consumes("application/json")
public Response createProductInJSON(Product product) {
    String result = "Product created : " + product;
    return Response.status(201).entity(result).build();
}

编辑 产品类别

public class Product {
    String name;
    int qty;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getQty() {
        return qty;
    }

    public void setQty(int qty) {
        this.qty = qty;
    }
}

现在我想测试这个,所以我使用下面的代码来测试。

Product product=new Product();
    product.setName("windows_phone");
    product.setQty(4);

    ResteasyClient client = new ResteasyClientBuilder().build();
    ResteasyWebTarget target = client.target("http://localhost:8080/Rest_Services/practice/service/post");

    Response response = target.request().post(Entity.entity(product, "application/json"));

    if (response.getStatus() != 200) {
        throw new RuntimeException("Failed : HTTP error code : "+ response.getStatus());
    }

    System.out.println("Server response : \n");
    System.out.println(response.readEntity(String.class));
    response.close();

执行时出现以下错误。

log4j:WARN No appenders could be found for logger (org.jboss.resteasy.plugins.providers.DocumentProvider).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" javax.ws.rs.ProcessingException: Unable to invoke request
at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:287)

Caused by: javax.ws.rs.ProcessingException: could not find writer for content-type application/json type: com.model.Product
at org.jboss.resteasy.core.interception.ClientWriterInterceptorContext.throwWriterNotFoundException(ClientWriterInterceptorContext.java:40)
at org.jboss.resteasy.core.interception.AbstractWriterInterceptorContext.getWriter(AbstractWriterInterceptorContext.java:138)

下面是我正在使用的 Jars。

enter image description here

编辑 3 POM.XML

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>rest_maven</groupId>
<artifactId>rest_maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.0</version>
    <configuration>
      <source>1.7</source>
      <target>1.7</target>
    </configuration>
  </plugin>
  <plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.3</version>
    <configuration>
      <warSourceDirectory>WebContent</warSourceDirectory>
      <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
  </plugin>
</plugins>
</build>
<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>2.6</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>2.6</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.5.6</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.3.1</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.3</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.2</version>
    </dependency>
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.9</version>
    </dependency>
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.3.6</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>4.3.3</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.spec.javax.annotation</groupId>
        <artifactId>jboss-annotations-api_1.1_spec</artifactId>
        <version>1.0.1.Final</version>
    </dependency>
    <dependency>
        <groupId>net.jcip</groupId>
        <artifactId>jcip-annotations</artifactId>
        <version>1.0</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.14</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
        <version>2.6</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-client</artifactId>
        <version>3.0.12.Final</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxrs</artifactId>
        <version>3.0.12.Final</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>jaxrs-api</artifactId>
        <version>3.0.12.Final</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxb-provider</artifactId>
        <version>3.0.12.Final</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jackson2-provider</artifactId>
        <version>3.0.12.Final</version>
    </dependency>
</dependencies>
</project>

settings.xml

<settings>
<localRepository>Z:\PROD_Deploy\mvn\repository</localRepository>

<proxies>
<proxy>
  <active>true</active>
  <protocol>http</protocol>
  <username>xxx</username>
  <password>xxx</password>
  <host>xxx</host>
  <port>80</port>
  <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>

请帮我解决这个错误。 提前致谢。

最佳答案

因此,在查看 JBoss 文档后,我想我已经找到了您的问题:

您正在使用 resteasy-client-3.0.4.Final这取决于 resteasy-jaxrs-3.0.4.Final ,如所述 here .

现在是,在 resteasy-jaxrs-3.0.4.Final 上类(class)CaseInsensitiveMap<V>有一个different hierarchyoneresteasy-jaxrs-3.0.12.Final .

我的建议是升级您的 resteasy-client对于版本 3.0.12 .

编辑

你的 pom.xml应该包括这些依赖项。验证哪些是您没有的并更新您的 Maven 项目:

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxrs</artifactId>
    <version>3.0.12.Final</version>
</dependency>

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>jaxrs-api</artifactId>
    <version>3.0.12.Final</version>
</dependency>

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxb-provider</artifactId>
    <version>3.0.12.Final</version>
</dependency>

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jackson2-provider</artifactId>
    <version>3.0.12.Final</version>
</dependency>

关于javax.ws.rs.ProcessingException : could not find writer for content-type application/json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35312808/

相关文章:

Java:扫描仪运行时无法被识别

java - 当我从 Android Studio 在 Android 手机上运行应用程序时,它显示空白屏幕

java - 关于 RESTful Java Web 服务框架的建议...

mysql - 加载组件时出错 "com_jce"

java - Resteasy 可选路径元素

firebase - Twitter OAuth request_token : Error Code 32, 无法进行身份验证

java - 如何在 Java 中比较字符串?

java - 在内存中存储等距网格的最佳方法是什么?

java - Apache Camel : Build a CXF consumer and call the service

c# - 为 Web 服务创建 XML 字符串