基本上我有一个消耗(application/json
)并产生(application/json
)的宁静服务(post)。此服务的单个参数是带注释的java对象。
我正在使用org.jboss.resteasy.client.ClientRequest
将请求发送到服务。但是,我在客户端获得此异常并且异常:
无法找到内容类型
application/json
类型的编写者。
这是否意味着我缺少一些图书馆罐子,或者我必须为application / json编写自己的编写器?
我正在使用resteasy 1.1
标记
答案 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)