2011-10-24 30 views
7

için ön ekiyle Harita istek parametreleri aşağıdaki GET isteği vardır:Bahar 3 MVC - tek fasulye

/api/search?filter.operation=Ping&filter.namespace=

parametre adları bir önek (filtre operasyonu, filtreyi dahil olduğunu lütfen unutmayın.. ad alanı).

class MessageSearchFilter { 
    String operation; 
    String namespace; 
    ... 
} 

Ve işleyicisi yöntemi aşağıdaki imzası vardır:

public @ResponseBody String searchMessages(MessageSearchFilter filter, ...);

Ancak bunu yapar değil Sonra

, ben bu parametreleri almak için kullanmak için aşağıdaki fasulye istiyorum var Bahar MVC olarak çalışmak 'operasyon' ve 'isim-alanı' özelliklerini tam olarak böyle adlandırılır. 'İşlem' ve 'ad alanı' kullanma isteğimi ('filtre' öneki olmadan) değiştirirsem çalışır.

Spring'e parametrelerin 'filter' ile öneklenmesini beklemesinin herhangi bir yolu var mı?

Bununla ilgili bir yan soru, çarpışan özellik adlarıyla birkaç form nesnesiyle bir yöntem imzam varsa ne olur?

cevap

0

Sen @RequestParam kullanarak gelen Parametrelerde harita gerekir ve bunları tam olarak nitelemek edebilirsiniz:

//Your @RequestMapping here... 
public @ResponseBody String searchMessages(
    @Requestparam("filter.operation") String filterOperation, 
    @RequestParam("filter.namespace") String filterNamespace) { 
    MessageSearchFilter messageSearchFilter = new MessageSearchFilter(); 
    messageSearchFilter.operation = filterOperation; 
    messageSearchFilter.namespace = filterNamespace; 
    //do your thing here... 
} 

Ayrıca artık özellik adı çarpışmaları ile diğer nesneler için eleme eklemek gerekir göreceksiniz .

+1

Teşekkürler, ancak, ben elimden fasulye değerlerini kendim oluşturma ve ayarlamadan kaçınmanın bir yolunu arıyordum. Bunun bir şekilde işe yaramasını beklerim çünkü bahar bunu iç içe fasulye için doğru yapar. – jjmontes

+0

Ayrıca bu özellikleri doğrudan fasülyeye enjekte etmek için bir yay yolu var mı? – davorp

1

yöntem işini yapmalıdır

@Override 
protected String getFieldBindingPrefix() { 
    return "filter."; 
} 

denetleyicinize ekleme.

+0

Cevabı biraz daha açıklayabilir misiniz? Google'da bu yöntemle ilgili hiçbir şey bulamadım. Denetleyici sınıfımda geçersiz kılmak için "getFieldBindingPrefix()" yöntemi yoktur. :-( – raspayu