2016-05-30 4 views
0

Ich habe einen einfachen REST-Client mit GET POST und DELETE-Methoden.Java Rest @GET funktioniert, aber @DELETE und @POST Pfade werden nicht getroffen

Seltsame Dinge sind, dass nur GET-Methoden funktionieren, weder POST noch DELETE werden nicht einmal getroffen und die Antwort ist natürlich "404 Not Found".

Hier ist mein REST-Service und der Kunde:

Schnittstelle:

public interface MyInterface { 
    @GET 
    @Path("/content") 
    @Produces(MediaType.APPLICATION_JSON) 
    Response getAirports(); 

    @DELETE 
    @Path("/content/{id}") 
    @Produces(MediaType.APPLICATION_JSON) 
    Response deleteAirport(@PathParam("id") String id); 
} 

Umsetzung:

@Path("/source") 
public class SourceService extends AbstractService implements MyInterface { 

@Override 
    public Response getContent() { 
     DBCollection collection = getDBCollection("content"); 

     DBCursor cursor = collection.find(); 
     String serialize = JSON.serialize(cursor); 

     return Response.status(Response.Status.OK).entity(serialize).build(); 
    } 

    @Override 
    public Response deleteContent(@PathParam("id") Integer id) { 
     DBCollection collection = getDBCollection("content"); 

     BasicDBObject query = new BasicDBObject(); 
     query.append("id", id); 

     collection.remove(query); 

     return Response.status(Response.Status.OK).build(); 
    } 
} 

Auftraggeber:

// This is working 
public void getContent() { 
     WebTarget path = collect.path("/content"); 
     Response response = path.request().get(); 
     LOGGER.info("collect.ping: " + response.readEntity(String.class) + "\n"); 
    } 

// This is not working 
public void deleteContent(Integer id) { 
     WebTarget path = collect.path("/content/"+id); 
     Response response = path.request(MediaType.APPLICATION_JSON).delete(); 
     System.out.println("object deleted:"+response); 
    } 

Ich habe versucht, mit Jersey anfordernden oder apa che Kunden, aber alle kehren 404 zurück und ich bin jetzt hoffnungslos.

Ich hoffe, Sie können mir eine Richtung geben.

+0

Versuchen Sie, Ihr Problem ein wenig zu reduzieren. Lassen Sie die Implementierung sofort eine OK-Antwort zurückgeben. – Chill

+0

@Chill Ich habe gerade versucht, das PathParam zu entfernen und es wurde getroffen und OK zurückgegeben. Wie ist es damit? Sende ich den Pfadparameter falsch? – neocorp

+0

Versuchen Sie, es nur in einen String ... wie „Flughafen“ Auch Sie einen Parameter in der Client als dies vorbei: public void deleteAirport (String iata) { Aber Sie nicht verwenden „iata“ in Ihrem Client-Code ... –

Antwort

2

Dies sieht wie ein mögliches Duplikat von Inheritance with JAX-RS aus. Haben Sie versucht, alle Annotationen in der Unterklasse oder keine zu replizieren, bedeutet das, dass Sie @PathParam in der Implementierungsklasse überhaupt nicht verwenden?

+0

wow! Ich habe mir den ganzen Tag die Haare gezogen und du hast es gerade gerettet ... Vielen Dank, ich weiß das wirklich zu schätzen !! – neocorp

+0

Sie sind herzlich willkommen! –

0

Wenn Sie tatsächlich Ihren Client debuggen können und Sie tatsächlich in der Lage sind, den Client-Code zu "durchlaufen"?

Wenn Sie einen Break-Point in Ihrem Server-Code platzieren und Sie nie wirklich "daran" brechen? Dann ist das Problem mit der Art und Weise, wie Sie Ihren Web-Service verfügbar machen und wie Sie versuchen, es zu konsumieren.

Versuchen Sie, den vom Server erwarteten Parametertyp und den Typ zu ändern, den Sie von Ihrem Client übergeben haben.

Wenn Sie es auf dem Server und Client zu einem einfacheren Typ ändern können .. dh eine Ganzzahl .. und dann können Sie tatsächlich einen Haltepunkt in Client und Server erfassen, dann wissen Sie, dass das Problem in Ihren Typen ist .

Ich hoffe, Sie können verstehen, was ich sage? Sie müssen Ihre Parameter wirklich vereinfachen und/oder zuerst ohne Parameter ausprobieren.

Wenn Sie etwas einfacher arbeiten, dann können Sie es auf etwas anderes erweitern.

Versuchen Sie, es nur in einen String ... wie „Flughafen“ Auch Sie einen Parameter in der Client als dies vorbei:

  public void deleteAirport(String iata) { 

Aber Sie müssen nicht „iata“ verwenden in Ihrem Client-Code ...

+0

gerade ausprobiert und es funktioniert ohne PathParam, aber wenn etwas als PathParam hinzugefügt wird, funktioniert es nicht wieder ... Was kann ich tun? diese Methode ist nur eine Client-Testmethode, versucht mit dem Parameter und ohne aber kein Glück ... – neocorp

+0

können Sie Break-Points setzen? im Server oder Client? oder beides? –

+0

Ja, ich kann diese Breakpoints aber ohne Parameter treffen. – neocorp

Verwandte Themen