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

时间:2010-09-02 20:10:57

标签: java json resteasy

基本上我有一个消耗(application/json)并产生(application/json)的宁静服务(post)。此服务的单个参数是带注释的java对象。

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

  

无法找到内容类型application/json类型的编写者。

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

我正在使用resteasy 1.1

标记

3 个答案:

答案 0 :(得分:6)

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

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

此时编写代码应该没有问题,例如:

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

答案 1 :(得分:2)

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

以下是示例:

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;
    }

}

和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);
        }

    }

就是这样,祝你有愉快的一天!

答案 2 :(得分:1)

将以下内容添加到Resource类或导致异常的方法

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