首页 文章

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

提问于
浏览
4

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

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

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

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

我正在使用resteasy 1.1

标记

3 回答

  • 2

    拉曼是对的 . Jettison是一个有效的选择 . 你也可以使用 Jackson . 如果您正在使用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

    实际上我遇到了同样的问题,我确实通过为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);
            }
    
        }
    

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

  • 6

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

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

相关问题