Spring MVC - Как получить список параметров метода @RequestMethod (возможно, по атрибуту @RequestParam) - PullRequest
0 голосов
/ 03 апреля 2012

У меня есть контроллер Spring MVC со следующим методом:

    @RequestMapping(value = {"/filter"}, method = RequestMethod.GET)
    @ResponseBody
    public List<MetricType> getMetricTypes(    
            @RequestParam(value = "subject", required = false) Long subjectId,
            @RequestParam(value = "area", required = false) Long areaId,
            @RequestParam(value = "onlyImmediateChildren", required = false) Boolean onlyImmediateChildren,   
            @RequestParam(value = "componentGroup", required = false) Long componentGroupId    
            ) throws Exception
    {
        //Some code
    }

Можно ли программно получить список параметров текущего метода (например, с помощью аннотации @RequestParam)?Решение должно работать без отладочных символов.Имя метода может быть жестко закодировано, если требуется.

Я пытаюсь проверить, содержит ли строка запроса недопустимые параметры (например, из-за опечатки).Я собираюсь сравнить имена параметров запроса из запроса с именами параметров запроса из сигнатуры метода (если это возможно).

ОБНОВЛЕНО

Решение должно работать и для необязательных (обязательных = ложных) параметров.

Большое спасибо

Максим

1 Ответ

2 голосов
/ 03 апреля 2012

вы можете использовать HttpServletRequest request как

public List<MetricType> getMetricTypes(    
            @RequestParam(value = "subject", required = false) Long subjectId,
            @RequestParam(value = "area", required = false) Long areaId,
            @RequestParam(value = "onlyImmediateChildren", required = false) Boolean onlyImmediateChildren,   
            @RequestParam(value = "componentGroup", required = false) Long componentGroupId  ,
HttpServletRequest request  
            ) throws Exception

и затем получите все имена параметров запроса как

request.getParameterNames()

и используйте цикл в них, чтобы выполнять свою работу как

for ( String parameterName:requestParameterNames){

}
...