2016-01-13 17 views
8
Aşağıda

benimRestlet yol param

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

yönlendirme takip edilerek çalışmıyor

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

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

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

Bir kaynak sınıfını çağırmak istiyorum ve için aynı fonksiyonların birkaç yapmak Kaynak sınıf UserProfile.java olduğunu kaynak sınıfı Bu, yukarıdaki kaynak sınıfımın, ekle, değiştir gibi UserProfiles ile ilgili işlevleri ele aldığı anlamına gelir. URL'ler şunlardır:
hesap/profil/add => Bir kullanıcı
hesap/profil eklemek için değiştir/=> benim uygulaması olarak sadece testi çalışmıyor yukarıdaki,

zaten kullanıcısını değiştirmek için() metodu Hesap/profil/

aracılığıyla da başlatılabilir. Ayrıca Pathparams ile denedim. Ama aynı zamanda çalışmadı. yolu için params:

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

eklendi ve kaynak sınıfta oldu, benim problem olduğu

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

herkes söyle.

+0

Eğer burada err günlüğünü gönderebilir miyim? –

+0

Dikkat için teşekkürler karthi. Hata atıldı .. Sunucu sadece cevap olarak 403 döndürür –

+0

İyi! Erişmeye çalıştığınız kaynak var demektir, ancak sunucu uygun bir yanıt verememektedir. Bu şeyleri deneyebilir, dizinin tüm izinlere sahip olduğundan emin olun ve @ Produces ek açıklamasını kullanarak json veya XML ürün türünü belirtin ve @put veya @ get yöntemleriyle deneyin. Bazen yazı suçludur. –

cevap

0

UserProfile sunucu kaynağınızı ekleme şekliniz biraz garip. Restlet'in doğal yönünü ve JAXRS uzantısındaki birisini karıştırdığını düşünüyorum.

Kullanım durumunuzla ilgili bazı testler yaptım ve beklediğiniz davranışa sahip oldum. Restlet'in 2.3.5 sürümünü kullandım.İşte

ne yaptım:

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(); 
  • uygulama sadece listelemek: Eğer JAXRS kullanmak istediğimizden

    • , bir JaxRsApplication oluşturup bileşeni eklemek gerekir Kullanmak istediğiniz sunucu kaynakları, ancak yönlendirmeyi ve yolları tanımlamıyor:

      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; 
          } 
      } 
      
    • sunucu kaynak işleme yöntem ve ilgili yolları tanımlar:

      • http://localhost:8182/account/profile/modify: modifyUser yöntem
      • http://localhost:8182/account/profile/add adlandırılan farklı yolları çağrı zaman, doğru yöntemleri adlandırılır

        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"); 
            } 
        } 
        
      • : addUser yöntemi,

      • http://localhost:8182/account/profile/ olarak adlandırılır: test yöntemi aşağıdaki gibidir: Thierry,

  • Eğer size yardımcı Umut lled