2010-11-18 10 views
4

Formları Spring'te doğrulayabildiğimi biliyorum, ancak URL parametrelerine benzer doğrulamayı uygulayabilir miyim? Spring Framework doğrulama isteği parametresi veya yol değişkeni

public String edit(@PathVariable("system") String system, 
    @RequestParam(value="group") String group, 
    ModelMap model) throws DAOException { 

Ben belli bir değeri vardır ya da belirli bir regex maç sağlamak için, denir yönteminden önce system ve group değerlerini doğrulamak Can

şu şekildedir: Örneğin, benim denetleyicisi bir yöntemi var mı?

Teşekkür

+1

Tam bir yanıt sağlamak için zamanınız yok, bu nedenle sadece bir yorum: JSR-303 ile, yöntem uzantısını ekleyene kadar yapamazsınız, ancak AOP ile yapabilirsiniz. – GaryF

cevap

0

Spring bunun için İddiası kullanmak mümkün olabilir. Assert api (http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/Assert.html) belirtilen parametrelere karşı sağlanan bir ifadeyi çalıştırır ve ifade yanlışsa eşitse o zaman Bir istisna atar.

Ör: Assert.isTrue (system.equals ("ValidSystemName"), "Geçerli bir sistem sağlamanız gerekir"); Ayrıca parametreler boş değilse veya boş dizeler olmadığını kontrol etmek için fonksiyonlar içeren

vb

0
  • doğrulanması gereken parametreler işaretlendiği bir ek açıklama oluşturun. Bu ek açıklamanın @RetentionRUNTIME ve @Target'un ElementType.PARAMETER'a ihtiyacı vardır.
  • AspectJ Aspect olarak uygulanan bir doğrulayıcı oluşturun.
  • Çağrıları bu doğrulayıcıya sahip denetleyicilere gönderin.

Örnek bir açıklama:

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.PARAMETER) 
@Documented 
public @interface ValidSystemParameter { 
} 

Örnek bir doğrulayıcı: http://www.eclipse.org/aspectj/doc/released/progguide/language-joinPoints.html

Bahar AspectJ entegrasyonu hakkında bilgi edinmek için:

@Aspect 
public class ValidSystemParameterValidator { 
    @Pointcut("TODO: write your pointcut expression") 
    public void controllerMethodWithValidSystemParameter(); 

    @Before(pointcut = "controllerMethodWithValidSystemParameter()") 
    public void validateSystemParameter(String systemParameter) { 
     // validate the parameter (throwing an exception) 
    } 
} 

AspectJ'yi pointcut ifade dili See hakkında bilgi edinmek için bakınız: http://static.springsource.org/spring/docs/current/spring-framework-reference/html/aop.html#aop-ataspectj

0

Biraz geç olabilirim, ancak Spring 3.0 ile @Valid ek açıklaması ile JSR-303 doğrulamasını kullanma seçeneğiniz vardır. Ayrıca, @DateTimeFormat ve @NumberFormat gibi daha belirgin bazı ek açıklamalar da vardır. Burada daha fazla bilgi:

Sadece tek bir değerde basit bir doğrulama yapmak istiyorsanız, ikincisiyle giderim (maksimum değeri kontrol etmek için basit int değerlere sahip olduğumda yaptığım şey).

İlgili konular