2016-01-13 8 views
8

Im Folgenden meine routetRestlet Pfad param funktioniert nicht

public Restlet createInboundRoot(){ 
Router router = new Router(getContext()); 
router.attach("account/profile",UserProfile.class); 

Folgende ist die Ressourcenklasse UserProfile.java

@post 
@path("add") 
public void addUser(User user){ 

@post 
@path("modify") 
public void modifyUser(User user){ 

@post 
public void test(){//only this is called 

Ich möchte eine Ressourcenklasse aufzurufen und zu tun paar identische Funktionen für ein Ressourcenklasse. Das bedeutet, dass meine obige Ressourcenklasse Funktionen behandelt, die mit den Benutzerprofilen wie Hinzufügen, Ändern zusammenhängen. URL ist:
Konto/profile/add => einen Benutzer
Konto/Profil hinzufügen/ändern => einen Benutzer

sowieso zu ändern, über meiner Implementierung nicht nur den Test nicht funktioniert() -Methode kann über Account/Profil/

aufgerufen werden Ich versuchte mit Pathparams als auch. Aber es hat auch nicht funktioniert. Für Weg params:

router.attach("account/profile/{action}",UserProfile.class); 

hinzugefügt wurde und in der Ressourcenklasse,

@post 
@path("{action}") 
public void addUser(@pathparam("action") String action, User user){ 

mir jemand sagen, wo mein Problem ist.

+0

Können Sie Ihre err Log hier posten? –

+0

Dank Karthi für Aufmerksamkeit. Es werden keine Fehler ausgelöst. Der Server gibt 403 als Antwort zurück –

+0

Nun! Das bedeutet, dass die Ressource, auf die Sie zugreifen möchten, vorhanden ist, der Server jedoch keine angemessene Antwort geben kann. Sie können diese Dinge versuchen, stellen Sie sicher, dass Ihr Verzeichnis alle Berechtigungen hat, und geben Sie einen Produktionstyp an, entweder json oder XML, indem Sie @ Produces annotation verwenden und versuchen Sie es mit @put oder @ get-Methoden. Manchmal ist Post ein Täter. –

Antwort

0

Die Art, wie Sie Ihre UserProfile Server-Ressource anhängen, ist ein bisschen seltsam. Ich denke, dass Sie das native Routing von Restlet und das von der JAXRS-Erweiterung gemischt haben.

Ich habe einige Tests in Bezug auf Ihren Anwendungsfall durchgeführt und konnte das von Ihnen erwartete Verhalten erzielen. Ich habe die Version 2.3.5 von Restlet benutzt.Hier

ist das, was ich getan habe:

  • Da Sie JAXRS verwenden möchten, benötigen Sie einen JaxRsApplication erstellen und auf dem Bauteil befestigen:

    Component component = new Component(); 
    component.getServers().add(Protocol.HTTP, 8182); 
    
        // JAXRS application 
        JaxRsApplication application 
         = new JaxRsApplication(component.getContext()); 
        application.add(new MyApplication()); 
    
        // Attachment 
        component.getDefaultHost().attachDefault(application); 
    
        // Start 
        component.start(); 
    
  • Die Anwendung einfach auflistet, die Server-Ressourcen Sie verwenden möchten, aber nicht definieren Routing und Pfade:

    import javax.ws.rs.core.Application; 
    
    public class MyApplication extends Application { 
        public Set<Class<?>> getClasses() { 
         Set<Class<?>> rrcs = new HashSet<Class<?>>(); 
         rrcs.add(AccountProfileServerResource.class); 
         return rrcs; 
        } 
    } 
    
  • Die Server-Ressource definiert Methoden und zugehörigen Strecken Handhabung:

    import javax.ws.rs.POST; 
    import javax.ws.rs.Path; 
    
    @Path("account/profile/") 
    public class AccountProfileServerResource { 
        @POST 
        @Path("add") 
        public User addUser(User user) { 
         System.out.println(">> addUser"); 
         return user; 
        } 
    
        @POST 
        @Path("modify") 
        public User modifyUser(User user) { 
         System.out.println(">> modifyUser"); 
         return user; 
        } 
    
        @POST 
        public void test() { 
         System.out.println(">> test"); 
        } 
    } 
    
  • Wenn ich die verschiedenen Pfade aufrufen, werden richtigen Methoden genannt:

    • http://localhost:8182/account/profile/modify:
    • die modifyUser Methode
    • http://localhost:8182/account/profile/add genannt: die addUser Methode heißt
    • http://localhost:8182/account/profile/: die test Methode ist ca gefüllt

Hoffe, es hilft Ihnen, Thierry