Restful GET funktioniert leider POST nicht

#1
Hallo,
ich habe ein kleines Problem mit meiner Restful API.

GET funktioniert einwandfrei.
Leider funktioniert POST nicht.

Die Serverseite sieht dabei wie folgt aus:

Java:
   @GET
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    public List<GroupRessource> getAllGroup(){
       //Mach was und retrun es         <-- Dies Funktioniert wie gewollt
        return result;
    }

    @POST
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 
    public void postGroup(JAXBElement<GroupRessource> groupres){
      //Mach was <-- Dies Funktioniert nicht!!
    }
Leider kommt es bei der POST Methode nicht mal zum Aufruf.
Das heißt: Keinerlei Ausgabe in der Cosole

Clientseitig rufe ich das ganze mit Javascript auf:

Javascript:
        var uri = MAINRESTURL+urlextension;
        var request = {
                    type: 'POST',
                    contentType: "application/json",
                   url: uri,
                   dataType: 'json',
                   data: JSON.stringify(data),
                   error: function(jqXHR) {
                       console.log("ajax error " + jqXHR.status);
                   },
                   success: function(data, textStatus, jqXHR){
                   }
               };
               return $.ajax(request);
Als Antwort erhalte ich ein 500er error.

Anfrage Header:
Accept application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language de,en-US;q=0.7,en;q=0.3
Cache-Control no-cache
Connection keep-alive
Content-Length 65
Content-Type application/json; charset=UTF-8
Cookie JSESSIONID=87C113EA8385E951B7E8AFB02F6A2723
Host localhost:8080
Pragma no-cache
Referer http://localhost:8080/
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0
X-Requested-With XMLHttpRequest

Da der Fehler auch auftritt, wenn ich es curl direkt versuch, vermute ich das der Fehler Serverseitig sein muss.
curl -i -X POST -H "Content-Type:application/json" http://localhost:8080/rest/group -d '{"description":"beschreibung1","name":"gruppe1","parentGroup":-1}'

Hat jemand ne Idee was ich falsch mache ?
 

saftmeister

Nutze den Saft!
Premium-User
#2
Hab es nicht getestet, aber ich vermute mal, der JSON-Parser kann mit JAXBElement<T> nichts anfangen. Welche Restful-Implementierung verwendest du denn?
 
#4
An dem Parsen von JSON zu Obj scheint es zu liegen...
Leider funktioiert folgendes Genausowenig...
Java:
   @POST
   @Consumes(MediaType.APPLICATION_JSON)  
   public void postGroup(GroupRessource groupres){...}
Interesant ist, das er es ja anderesherum schafft (siehe GET Methode).
Ich werde das Senario mal mit einem einfacherern Object Versuch, um zu sehen was ihm vielleicht am JSON Obj fehlt um daraus das eig. Obj zu basteln.
 

saftmeister

Nutze den Saft!
Premium-User
#6
Hi,

ich habe ein bisschen experimentiert und es funktioniert bei mir:

Java:
package de.tutorials.test.rest;

import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.jboss.logging.Logger;

@Path("/groupservice")
public class RestService {
    private Logger log = Logger.getLogger(RestService.class);

    @GET
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public List<GroupRessource> getAllGroups() {
        List<GroupRessource> result = new ArrayList<GroupRessource>();

        return result;
    }

    @POST
    @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public void storeGroup(GroupRessource group) {
        log.debug("Group " + group);
    }
}
Java:
package de.tutorials.test.rest;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class GroupRessource {
    private int id;

    private String description;

    private String name;

    private int parentGroup;

    /**
     * @return the id
     */
    public final int getId() {
        return id;
    }

    /**
     * @param id
     *            the id to set
     */
    public final void setId(int id) {
        this.id = id;
    }

    /**
     * @return the description
     */
    public final String getDescription() {
        return description;
    }

    /**
     * @param description
     *            the description to set
     */
    public final void setDescription(String description) {
        this.description = description;
    }

    /**
     * @return the name
     */
    public final String getName() {
        return name;
    }

    /**
     * @param name
     *            the name to set
     */
    public final void setName(String name) {
        this.name = name;
    }

    /**
     * @return the parentGroup
     */
    public final int getParentGroup() {
        return parentGroup;
    }

    /**
     * @param parentGroup
     *            the parentGroup to set
     */
    public final void setParentGroup(int parentGroup) {
        this.parentGroup = parentGroup;
    }
}
 

Anhänge

#7
Danke für deine Unterstützung bei mir gehts nun auch...
Das Problem war das mein übermitteltes JSON Object zu wenig Attribute besessen hat um in ein Java Object konvertiert werden zu können,.