Java Restful jboss反序列化

Java Restful jboss反序列化,java,json,web-services,rest,jboss,Java,Json,Web Services,Rest,Jboss,我正在JBoss7.1.1 Final中构建一个restful Web服务。它工作得很好,直到我需要一个自定义反序列化程序。代码: @Entity @DiscriminatorColumn(name = "tipo") @Table(name = "debitavel", schema = "despesas_db") @Inheritance(strategy = InheritanceType.JOINED) @JsonDeserialize(using = DebitavelDeseria

我正在JBoss7.1.1 Final中构建一个restful Web服务。它工作得很好,直到我需要一个自定义反序列化程序。代码:

@Entity
@DiscriminatorColumn(name = "tipo")
@Table(name = "debitavel", schema = "despesas_db")
@Inheritance(strategy = InheritanceType.JOINED)
@JsonDeserialize(using = DebitavelDeserializer.class)
@JsonSerialize(using = DebitavelSerializer.class)
public abstract class Debitavel {

}
该类有2个子类:

@Entity
@Table(name = "conta", schema = "despesas_db")
@DiscriminatorValue(value = "CONTA")
public class Conta extends Debitavel {
}

@Entity
@DiscriminatorValue(value = "CONTA")
@Table(name = "cartao", schema = "despesas_db")
public class CartaoCredito extends Debitavel {
}
我让这个类使用Debitavel:

@Entity
@Table(name = "despesa", schema = "despesas_db")
@DiscriminatorValue(value = "D")
public class Despesa {

    @Column
    private String descricao;

    @ManyToOne
    @JoinColumn(name = "debitavel_id")
    protected Debitavel debitavel;

}
所以在页面中,我发送了一个类似这样的json

{
    "descricao": "TESTE",
    "debitavel": {
         "id": 101,
         "descricao": "Conta1",
         "cor": "#ff0000",
         "tipo": "CONTA"
    }
}
所以,我想创建一个基于atributte tipo的CartaoCredito或Conta实例的类,所以我构建了一个反序列化器:

public class DebitavelDeserializer extends JsonDeserializer<Debitavel> {

      @Override
      public Debitavel deserialize(JsonParser jp, DeserializationContext ctxt)     throws IOException, JsonProcessingException {
              //staff to create Conta or CartaoCredito
      }
公共类DebitavelDeserializer扩展JsonDeserializer{
@凌驾
public Debitavel反序列化(JsonParser jp,反序列化上下文ctxt)抛出IOException,JsonProcessingException{
//创建Conta或CartaoCredito的员工
}
}

还有我的pom.xml:

         <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-asl</artifactId>
            <version>1.9.12</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.12</version>
        </dependency>

org.codehaus.jackson
jackson core asl
1.9.12
org.codehaus.jackson
杰克逊地图绘制者
1.9.12
然而,当我尝试部署应用程序时,jboss说Debitavel是一个抽象类,无法构建实例。我寻找解决方案,并尝试了几种解决方案:

  • 使用jboss中的模块创建jboss-deployment-structure.xml,并将pom.xml更改为提供的
  • 更改intire resteasy模块
  • 更改为新的jackson 2.x
看起来jboss简单地忽略了这些注释


我解决了。。。但老实说,我不明白为什么,让我们看看:

我将pom.xml更改为

        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>2.3.2.Final</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-multipart-provider</artifactId>
            <version>2.3.2.Final</version>
            <scope>provided</scope>
        </dependency>

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

org.jboss.resteasy
resteasy jaxrs
2.3.2.最终版本
假如
org.jboss.resteasy
resteasy多部分提供程序
2.3.2.最终版本
假如
org.jboss.resteasy
resteasy jackson提供商
2.3.2.最终版本

一切都很好。有人可以解释为什么这样做?

从resteasy jackson提供商添加依赖项也可以帮助我。