2010-09-29 28 views
0

J'utilise RestEasy pour marchal entités à JSON. Cela fonctionne bien mais d'une manière ou d'une autre tout est représenté comme une chaîne. par exemple.RestEasy et JSON - comment éviter les guillemets autour d'un nombre?

@XmlRootElement(name="TestObject") 
public class TestObject { 
    private Long value; 
    public Long getValue(){ 
     return value; 
    } 
} 

Au lieu de créer quelque chose comme: {TestObject:{value:1234}}

Il crée {TestObject:{value:"1234"}} (S'il vous plaît noter le « » autour du nombre)

Ainsi, la valeur longue est convertie en une chaîne. Comment puis-je éviter cela?

J'ai demandé sur le forum de Jackson ce que RestEasy utilise pour le marchaling JSON mais ils ont dit qu'il est probablement dû à Java-> XML-> JSON. Il ne semble pas y avoir de forum RestEasy et personne sur le forum Seam n'a pu répondre à ma question.

Est-ce que quelqu'un d'autre a le même problème?

Cordialement

Répondre

1

Bon le problème est que RestEasy + Seam utilise Largage par défaut (et non Jackson). Jettison fait le marchaling via Java-> XML-> JSON. Les bocaux Jackson ne sont pas réellement inclus dans la distribution Seam, vous devez donc télécharger RestEasy et copier tous les jars qui mentionnent jackson dans votre répertoire lib. Lorsque RestEasy trouve le resteasy-jackson-provider.jar dans le classpath, Jackson sera utilisé à la place de Jettison.

Un problème que j'ai eu en passant à Jackson de Jettison étaient des références cyclistes. Avec Jettison vous annotez simplement la méthode (par exemple une relation @ManyToOne) avec @XmlTransient. Pour Jackson, vous devez annoter avec @JsonIgnore

+0

Si c'est la réponse à votre question, alors s'il vous plaît marquer comme accepté de sorte qu'il n'apparaît pas dans la partie sans réponse –

+0

Non, il n'est pas entièrement répondu, ce n'est qu'une solution de contournement. Lorsque vous utilisez Jackson au lieu de Jettison avec RestEASY, vous obtenez le problème que les tableaux ne sont pas étiquetés dont j'ai besoin. Je suppose que RestEASY est principalement testé avec Jettison. Jackson prend en charge l'étiquetage des tableaux en utilisant @JsonTypeInfo mais d'une manière ou d'une autre, cela se perd lorsque RestEASY fait l'emballage. – Ben

1

utilisation

<dependency> 
    <groupId>org.jboss.resteasy</groupId> 
    <artifactId>resteasy-jettison-provider</artifactId> 
    <version>2.0.1.GA</version> 
    <exclusions> 
     <exclusion> 
      <groupId>javax.xml.bind</groupId> 
      <artifactId>jaxb-api</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>com.sun.xml.bind</groupId> 
      <artifactId>jaxb-impl</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>javax.xml.stream</groupId> 
      <artifactId>stax-api</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

Je n'utilise que resteasy-jettison-fournisseur, mais le serveur se bloque lorsque je tente d'obtenir une sortie JSON, mais après que je ne comprend pas les JAXB-api et jaxb-impl. webservice fonctionne parfaitement bien avec la sortie JSON