IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

[EJB / REST / JSON / JQuery] Problème pour faire un POST


Sujet :

Services Web Java

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 50
    Points
    50
    Par défaut [EJB / REST / JSON / JQuery] Problème pour faire un POST
    Bonjour à tous,

    Je souhaite faire un petit chat web2.0 avec Ajax mais je n'arrive pas à poster des données au formats JSON.

    Mes DTO sont très simples pour éviter de me prendre trop la tête au début:

    ChatUser { int siteUserId, int anonId, String login }
    ChatMessage { String content, CharUser sender}

    Elles sont toutes annotées avec @XmlRootElement et @XmlElement/@XmlAttribute sur les getters.

    Voici mon EJB de ressource REST:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    @Path("/chat")
    @Stateless
    @Produces("application/json")
    @Consumes("application/json")
    public class ChatResource {
     
        @EJB
        ChatsContainerLocal chatContainer;
     
        public ChatResource() {
        }
     
        @GET
        @Path("/get-lastmessages")
        public List<ChatMessage> getLastMessages(@QueryParam("name") String name, @QueryParam("token") int token) {
            System.out.println("REST SERVICE: chat/lastmsg@GET: " + name + " token=" + token);
            List<ChatMessage> msgs = chatContainer.getLastMessages(name, token);
            System.out.println("il y a " + msgs.size() + " nouveaux messages!");
            return msgs;
        }
     
        @POST
        @Path("/post-message")
        public void addMessage(@QueryParam("chatName") String chatName, @QueryParam("chatMessage") ChatMessage chatMessage) {
            System.out.println("REST SERVICE: addMessage to " + chatName + ": " + (chatMessage == null ? "null" : chatMessage.getContent()));
            chatContainer.addMessage(chatName, chatMessage);
        }
     
     
    }
    Je formalise ma donnée JSON comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var senderMessage = {anonId: 4, siteUserId: null, login: "anon"};
    var chatMessage1 = {content: textAreaValue, sender: senderMessage};
    var requestDatas = {chatName:"Chatoune",chatMessage: chatMessage1};
    var datax = JSON.stringify(requestDatas);

    J'ai essayé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    jQuery.post(
                        "http://localhost:8080/cocoon.services/resources/chat/post-message",
                        datax,
                        function (data, textStatus) {
                            alert("message posted! "+textStatus);
                        },
                        "json");
    me retournant une erreur "415 Unsupported Media Type"

    et cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    jQuery.ajax({
                            async : false,
                            type:"POST",
                            contentType: "application/json",
                            dataType: "application/json",
                            url: "http://localhost:8080/cocoon.services/resources/chat/post-message",
                            data: datax,
                            success: function(data) {       
                            },
                            error: function(data) {
     
                            }
                        });
    me retournant une erreur "400 Bad Request".
    Pourtant les ressources GET passent niquel... Je ne comprend pas ce qui ne va pas...
    Voici les traces de Jersey pour le jQUery.ajax():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    X-Jersey-Trace-000        accept root resource classes: "/chat/post-message"
    X-Jersey-Trace-001        match path "/chat/post-message" -> "/application\.wadl(/.)?", "/chat(/.)?"
    X-Jersey-Trace-002        accept right hand path java.util.regex.Matcher[pattern=/chat(/.*)? region=0,18 lastmatch=/chat/post-message]: "/chat/post-message" -> "/chat" : "/post-message"
    X-Jersey-Trace-003        accept resource: "chat" -> @Path("/chat") org.cianelli.cocoon.services.chat.rest.__EJB31_Generated__ChatResource__Intf____Bean__@129e956
    X-Jersey-Trace-004        match path "/post-message" -> "/get-lastmessages(/)?", "/get-lastmessage(/)?", "/post-message(/)?", "/([^/]+?)/join/([^/]+?)(/)?", "/([^/]+?)/join(/)?", ""
    X-Jersey-Trace-005        accept right hand path java.util.regex.Matcher[pattern=/post-message(/)? region=0,13 lastmatch=/post-message]: "/post-message" -> "/post-message" : ""
    X-Jersey-Trace-006        accept sub-resource methods: "chat" : "/post-message", POST -> org.cianelli.cocoon.services.chat.rest.__EJB31_Generated__ChatResource__Intf____Bean__@129e956
    X-Jersey-Trace-007        matched sub-resource method: @Path("/post-message") public void org.cianelli.cocoon.services.chat.rest.ChatResource.addMessage(java.lang.String,org.cianelli.cocoon.services.chat.ChatMessage)
    X-Jersey-Trace-008        matched message body reader: class java.lang.String, "application/json; charset=UTF-8" -> com.sun.jersey.core.impl.provider.entity.StringProvider@3311c0
    X-Jersey-Trace-009        matched message body reader: class org.cianelli.cocoon.services.chat.ChatMessage, "application/json; charset=UTF-8" -> com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$App@1e06d94
    X-Jersey-Trace-010        mapped exception to response: javax.ws.rs.WebApplicationException@12f5fb6 -> 400 (Bad Request)
    X-Powered-By        Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1.2 Java/Sun Microsystems Inc./1.6)
    J'ai l'impression que Jersey n'arrive pas à désérialiser le ChatUser dans le ChatMessage. Il se pourrait qu'il manque un paramètre quelque part...

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    C'était un problème de conflit avec un attribut "Content" dans une des classes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème pour faire un insert avec une image
    Par vbcasimir dans le forum Modules
    Réponses: 3
    Dernier message: 02/11/2005, 09h21
  2. Réponses: 5
    Dernier message: 24/09/2005, 20h31
  3. problème pour faire des blocs
    Par tinkye_winkye dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 04/01/2005, 14h13
  4. [SQL] problème pour faire ma requete
    Par seb.briet dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/12/2004, 16h51
  5. [FLASH MX2004] Problème pour faire un bouton play
    Par melanie075 dans le forum Flash
    Réponses: 13
    Dernier message: 16/12/2004, 22h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo