2011-10-09 7 views
2

Je suis nouveau à JAX-RS + RESTEasyJAX-RS + retour de service RESTEasy JSON cordes sans guillemet

Ce qui me entrave est que le service retourne la chaîne JSON sans guillemets doubles.

@Path("/hello") 
public class HelloService { 

    @GET 
    @Path("say") 
    @Produces(MediaType.APPLICATION_JSON) 
    public String say() { 
     return "Hello"; 
    } 
} 

Quand j'appelle «/bonjour/dire » il retourne juste Bonjour mais ce que je me attends est « Bonjour »

googlé pendant plusieurs jours. J'ai un morceau de Javascript en utilisant JQuery qui appelle le service comme celui-ci:

$(function(){ 
    $.ajax({ 
      url : "services/hello/say", 
      context : $('#message'), 
      success : function(data){ 
        $(this).html(data); 
       }, 
      error : function(xhr, ajaxOptions, thrownError){ 
        $(this).html(xhr.status + "<br>" + thrownError); 
       } 
     }); 
    }); 

Et c'est le résultat

SyntaxError: Unable to parse JSON string 

Bien que le statut est 200. Y at-il un moyen de résoudre ce plutôt que Ajouter manuellement les guillemets doubles à la chaîne?

Répondre

4

Quelle implémentation JSON utilisez-vous avec RESTeasy, Jettison ou Jackson? Juste essayé avec Jettison, même problème. Je viens d'examiner la spécification JSON et à partir de là, il est écrit qu'une valeur elle-même n'est pas une réponse JSON valide (voir http://www.json.org/). Soit vous avez un objet ou un tableau de valeurs.

Je suppose que cela pourrait être le problème car RESTeasy n'est pas sûr de ce qu'il faut faire car vous ne renvoyez pas d'objet d'un seul type (par exemple, String, Integer, ...).

Que se passe-t-il si on retourne un tableau.

+0

fournisseur Jackson –

+0

Merci pour votre réponse, le résultat pour le tableau chaîne est [ « Bonjour », « Monde »] .It de bon je suppose que –

+1

parfait. Ainsi, comme spécifié par le site json.org, JSON valide est un objet ou un tableau de valeurs. – rit

3

Le problème n'est pas avec le cadre, mais avec votre code. Selon JAX-RS, la signature de méthode public String say() indique que la chaîne que vous renvoyez de la méthode est l'entité à renvoyer dans la réponse. Aucun autre traitement n'est effectué. Je lierais les documents pertinents, mais jcp.org, où ils ont utilisé en direct, semble avoir disparu. Si vous voulez que votre RESTEasy fasse le JSON pour vous, vous devez retourner un POJO.

1

Je vous suggère d'utiliser le fournisseur Jackson JSON. Vous avez juste besoin d'ajouter le resteasy-jackson-provider.jar dans votre chemin de construction du projet. Attribuez l'annotation @Produces ("application/json") à votre méthode dans votre Business Service. Et vous êtes prêt à partir. À votre santé !!!