2015-04-17 3 views
2

Я хочу проверить параметр запроса, который является строковым значением. Большинство примеров в сети говорят о проверке объекта домена с помощью настраиваемого валидатора. Но я хочу написать валидатор только для значения String. Как это сделать?Проверка параметра запроса перед контроллером

@Controller 
@RequestMapping("/base") 
class MyController{ 

    //value needs to be validated. 
    @RequestMapping("/sub") 
    public String someMethod(@RequestParam String value, BindingResult result){ 
     if(result.hasErrors()){ 
      return "error"; 
     } 

     //do operation 
     return "view"; 

    } 
} 

Я хочу использовать интерфейс Validator, который уже доступен весной, а не АОП или каких-либо, если условия

+0

Вы можете использовать AOP и перехватить вызов метода, проверить параметр и, если он недействителен, вручную изменить результат привязки или выбросить исключение и обработать его в контроллере. – ecyshor

+0

Я не думаю, что мне нужен АОП. Я хочу использовать интерфейс Validator, который уже доступен весной – sidgate

+0

Как создать объект-оболочку над String и добавить аннотации JSR 303 для проверки или создать валидатор для соответствующего объекта? – ecyshor

ответ

1

Ваш контроллер не может проверить параметров, потому что BindingResult должен следовать ModelAttribute, не RequestParam.

Так что, если вы хотите использовать автоматическую проверку Spring MVC, вы должны использовать класс, содержащий вашу строку как ModelAttribute:

class MyController { 
    @RequestMapping("/sub") 
    public String someMethod(@ModelAttribute Params params, BindingResult result){ 
     if(result.hasErrors()){ 
      return "error"; 
     } 

     //do operation with params.value 
     return "view"; 

    } 

    public static class Params { 
     // add eventual JSR-303 annotations here 
     String value; 

     // getter and setter ommited for brievety 
    } 

} 

Конечно, это предполагает, что вы положили валидатор в WebBinder, например, через @InitBinder аннотированный метод вашего контроллера.

0
//value needs to be validated. 
    @RequestMapping("/sub") 
    public String someMethod(@RequestParam String value, BindingResult result) throws SomeException { 

     if (!ValidationUtils.isValid(value)) { 
      throw new SomeException("Some text"); 
     } 
+0

Не могли бы вы подробнее рассказать о своем ответе, добавив немного подробного описания решения, которое вы предоставляете? – abarisone

Смежные вопросы