2011-04-02 17 views
5

Sunucuya gönderilen PUT isteğinin yakalanmasıyla ilgili bir sorunum var. Spring Framework, PUT yöntemini etkinleştirin

Bunlar

benim yöntemleri şunlardır:

Ben çağrıyı takip geldiğimde, PUT isteği dışarı ekranda Dersimde .. GET yöntemi ile değil, PUT yöntemiyle ele alındığı
@RequestMapping(method= RequestMethod.GET) 
public String getCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) { 
    System.out.println("get request"); 
    return "index"; 
} 


@RequestMapping(method= RequestMethod.PUT) 
public String putCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) { 
    System.out.println("put request"); 
    return "index"; 
} 

, her zaman olduğu gibi okuma "olsun istek". Tarayıcı günlüğünü kontrol ettim ve doğru PUT isteğini gönderdiklerini teyit ettim, bu yüzden burada bazı Spring konfigürasyonunu kaçırdığımı düşünüyorum, ama ne olduğunu bilmiyorum ..

Birisi yardım edebilir mi?

Teşekkür ederiz.

DÜZENLEME: sınıfla Ek kodu:

@Controller 
@RequestMapping(value="/retail/{cid}/master/city") 
public class City { 

    @RequestMapping(value="/foo1", method= RequestMethod.GET) 
    public String getCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) { 
     System.out.println("get request"); 
     return "index"; 
    } 

    @RequestMapping(value="/foo2", method= RequestMethod.PUT) 
    public String putCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) { 
     System.out.println("put request"); 
     return "index"; 
    } 
} 

EDIT2: Üzgünüm, ben iki kez bu uyarıyı yakalandı .. günlüğünü inceleyerek çok dikkat etmedi görünüyor.

WARNING: Error in annotation processing: java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor

Herhangi bir fikri nasıl düzeltebilirim?

+0

'getCity' çağrılıyorsa, istek bir 'GET' yöntemidir. Ek bir yapılandırma gerekmez, yanlış türde bir istek göndermeniz gerekir. Müvekkilin doğru şeyi yaptığını biliyor musun? – skaffman

+0

evet .. Müşterinin doğru şeyi yaptığından eminim. Konsolda oturum açıyordu. Krom ve firefox ile denendi ve her ikisi de PUT isteği gönderdi. – Magician

+0

'getCity' için bir' HttpServletRequest' parametresi ekleyin, sonra 'request.getMethod()' yazın ve ne yazdığını görün. – skaffman

cevap

3

O çözüldü ... Bu

 
@Controller 
@RequestMapping(value="/retail/{cid}/master/city") 
public class City { 

    @RequestMapping(method= RequestMethod.GET) 
    public String getCity(@PathVariable(value="cid") String cid, @RequestParam(value="State") Integer state, Model model) { 
    System.out.println("get request"); 
    return "index"; 
    } 

    @RequestMapping(method= RequestMethod.PUT) 
    public String putCity(@PathVariable(value="cid") String cid, @RequestBody CityData state, Model model) { 
    System.out.println(state.getState()); 
    return "index"; 
    } 
} 
 
public class CityData { 
    private String state; 
    public String getState() { 
    return this.state; 
    } 
    public void setState(String state) { 
    this.state = state; 
    } 
} 

Sen @RequestBody String state kullanabilirsiniz çalışır revize yöntemdir ama sadece örnek yukarıda benim kod oversimplification çünkü CityData nesne oluşturmak için tercih Verilerin nasıl işleneceğini kontrol etmek için

1

Bir eşleme değeri belirtmediğiniz ile ilgili bir şey olabilir. @RequestMapping(value="/foo", ...GET) ve @RequestMapping(value="/foo", ...PUT) sırasıyla

belgeleri yazıyor deneyin: (açık yolu haritalama olmadan) tek varsayılan yöntemi varsa

sonra bulundu daha spesifik eşlenen yöntemle olmadan tüm istekleri buna sevk edilecektir. Bu gibi birden çok varsayılan yönteminiz varsa, aralarında seçim yapmak için yöntem adı dikkate alınacaktır.

Hata hakkında - aopalliance jar sınıf ortamınıza eklemeniz gerekir.

+0

Eşlemeyi yalnızca sınıf seviyesinde tanımladım. Yöntem istekleri ele alacaktır. – Magician

+0

@Rudy Dajoh, bunu deneyin - hangi yöntemin çağırılacağının seçilmesiyle ilgili bir sorun olabilir. – Bozho

+0

Tamam, '@ RequestParam' kullanarak test ettim, çalıştırılan bir getCity oldu, tüm parametrelerin çıkarılması putCity'yi parametre olmadan doğru şekilde çağırırdı. HttpServletRequest'i kullanarak parametreleri yakalayamıyorum. PutCity'nin başarısız olmasının ve getCity'nin neden çağırılmasının bir nedeni olabilecek '@ RequestParam' kullanarak bir' geçersiz istek 'hatası görüyorum ve buradaki temel sorun, Java'nın herhangi bir parametreyi istek üzerine alamaması olabilir. Verileri yakalamak için RoR ile denedim ve RoR tüm form verilerini doğru bir şekilde alabildi. Yani, sorunun Java'da olduğundan eminim. – Magician

İlgili konular