为什么编写媒体类型应用程序/ json失踪

时间:2022-07-26 07:28:24

Basically I have a restful service (post) that consumes(application/json) and produces (application/json). The single param for this service is an annotated java object.

基本上我有一个使用(application / json)并生成(application / json)的restful服务(post)。此服务的单个参数是带注释的java对象。

I am using org.jboss.resteasy.client.ClientRequest to send the request to the service. However, I am getting this exception in the client end and the exception:

我正在使用org.jboss.resteasy.client.ClientRequest将请求发送到服务。但是,我在客户端和异常中得到此异常:

could not find writer for content-type application/json type.

找不到内容类型application / json类型的writer。

Does this mean that I am missing some library jars or I have to write my own writer for application/json?

这是否意味着我缺少一些图书馆罐子,或者我必须为application / json编写自己的编写器?

I am using resteasy 1.1

我正在使用resteasy 1.1

Mark

3 个解决方案

#1


6  

Raman is correct. Jettison is a valid option. You can also use Jackson. If you are using maven, it is as simple as including the following dependency in you pom:

拉曼是​​对的。 Jettison是一个有效的选择。你也可以使用杰克逊。如果您正在使用maven,那么就像在pom中包含以下依赖项一样简单:

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

At which point you should have no problem writing code such as:

在这一点上,编写代码应该没有问题,例如:

    SomeBean query = new SomeBean("args")
    request.body("application/json", query);
    ClientResponse response = request.post();

#2


2  

actually I had the same problem, I did solve it by adding jettison provider for application/json mime type. I don't know whether resteasy 1.1 containts jettison provider but version 1.2 does. Also if you are using jdk 1.6 you must exclude javax.xml.stream:stax-api jar file, otherwise you will have a problem.

实际上我遇到了同样的问题,我确实通过为application / json mime类型添加了jettison提供程序来解决它。我不知道resteasy 1.1是否包含jettison提供者,但1.2版本确实如此。此外,如果您使用的是jdk 1.6,则必须排除javax.xml.stream:stax-api jar文件,否则您将遇到问题。

Here is the example:

这是一个例子:

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;


@XmlRootElement(name="account")
public class Account {

    private Long id;
    private String accountNo;


    public Account(){}
    public Account(String no)   {
        accountNo=no;
    }


    @Id
    @XmlElement
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }

    @XmlElement
    public String getAccountNo() {
        return accountNo;
    }
    public void setAccountNo(String a) {
        accountNo = a;
    }

}

and JAXB class:

和JAXB类:

import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;


    @Path("/account")
    public class AccountService {


        @GET
        @Path("/{accountNo}")
        @Produces("application/json")
        public Account getAccount(@PathParam("accountNo") String accountNo) {
                   return new Account(accountNo);
        }

    }

That's all, have a nice day!

这就是全部,祝你有个美好的一天!

#3


1  

Add below to the Resource class or the method causing the exception

将下面添加到Resource类或导致异常的方法

@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)

#1


6  

Raman is correct. Jettison is a valid option. You can also use Jackson. If you are using maven, it is as simple as including the following dependency in you pom:

拉曼是​​对的。 Jettison是一个有效的选择。你也可以使用杰克逊。如果您正在使用maven,那么就像在pom中包含以下依赖项一样简单:

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

At which point you should have no problem writing code such as:

在这一点上,编写代码应该没有问题,例如:

    SomeBean query = new SomeBean("args")
    request.body("application/json", query);
    ClientResponse response = request.post();

#2


2  

actually I had the same problem, I did solve it by adding jettison provider for application/json mime type. I don't know whether resteasy 1.1 containts jettison provider but version 1.2 does. Also if you are using jdk 1.6 you must exclude javax.xml.stream:stax-api jar file, otherwise you will have a problem.

实际上我遇到了同样的问题,我确实通过为application / json mime类型添加了jettison提供程序来解决它。我不知道resteasy 1.1是否包含jettison提供者,但1.2版本确实如此。此外,如果您使用的是jdk 1.6,则必须排除javax.xml.stream:stax-api jar文件,否则您将遇到问题。

Here is the example:

这是一个例子:

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;


@XmlRootElement(name="account")
public class Account {

    private Long id;
    private String accountNo;


    public Account(){}
    public Account(String no)   {
        accountNo=no;
    }


    @Id
    @XmlElement
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }

    @XmlElement
    public String getAccountNo() {
        return accountNo;
    }
    public void setAccountNo(String a) {
        accountNo = a;
    }

}

and JAXB class:

和JAXB类:

import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;


    @Path("/account")
    public class AccountService {


        @GET
        @Path("/{accountNo}")
        @Produces("application/json")
        public Account getAccount(@PathParam("accountNo") String accountNo) {
                   return new Account(accountNo);
        }

    }

That's all, have a nice day!

这就是全部,祝你有个美好的一天!

#3


1  

Add below to the Resource class or the method causing the exception

将下面添加到Resource类或导致异常的方法

@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)