Spring Framework проверяет параметр запроса или переменную пути - PullRequest
4 голосов
/ 18 ноября 2010

Я знаю, что могу проверять формы в Spring, но могу ли я применить подобное подтверждение к параметрам URL?Например, у меня в контроллере есть метод:

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

Можно ли проверить значения system и group перед вызовом метода, чтобы убедиться, что они имеют определенное значение илисоответствовать определенному регулярному выражению?

Спасибо

Ответы [ 3 ]

0 голосов
/ 07 декабря 2010
  • Создание аннотации, отмечающей параметры, которые должны быть проверены.Для этой аннотации требуется @Retention из RUNTIME и @Target из ElementType.PARAMETER.
  • Создать валидатор, реализованный как AspectJ Aspect.
  • Обернуть вызовы контроллеров этим валидатором.

Пример аннотации:

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

Пример валидатора:

@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, см .: http://www.eclipse.org/aspectj/doc/released/progguide/language-joinPoints.html

Чтобы узнать об интеграции AspectJ в Spring, см. http://static.springsource.org/spring/docs/current/spring-framework-reference/html/aop.html#aop-ataspectj

0 голосов
/ 21 сентября 2011

Возможно, я немного опоздал, но в Spring 3.0 у вас есть возможность использовать проверку JSR-303 с аннотацией @Valid. Есть также некоторые более конкретные аннотации как @DateTimeFormat и @NumberFormat. Подробнее здесь: http://static.springsource.org/spring/docs/3.0.5.RELEASE/reference/validation.html#validation-mvc На мой взгляд, у вас есть два варианта:

  • Определите параметры вашего запроса как объекты и пользователя JSR-303. Проверка.
  • Используйте API Assert, как указано выше.

Если вы просто хотите сделать простую проверку для одного значения, я бы выбрал последнее (это то, что я делал, когда у меня были простые значения int для проверки максимального значения).

0 голосов
/ 18 ноября 2010

Вы можете использовать Spring Asserts для этого.API Assert (http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/Assert.html) запускает предоставленное выражение для указанных параметров, и если выражение равно false, оно выдает исключение.

Пример: Assert.isTrue (system.equals ("ValidSystemName"), ""Вы должны указать действительную систему ");

Она также содержит функции для проверки того, что параметры не равны NULL или не являются пустыми строками и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...