Използването на @RequestParam хвърля грешка в Spring 3

Използвам анотацията @RequestParam, за да получа параметрите на заявката, и използвам същата, за да вмъкна стойностите в DB. Настроих контролера да пренасочва към същата страница, която съдържа текстовите полета, за да може потребителят да въвежда стойностите, които се четат с помощта на анотацията @RequestParam.

Но след като въведа стойностите в текстовите полета и щракна върху изпращане, извежда тази грешка

Неуспешна обработка на заявката; вложеното изключение е java.lang.IllegalArgumentException: Името за тип аргумент [java.lang.String] не е налично и информацията за име на параметър също не е намерена във файла на класа.

Аз съм начинаещ в Spring 3 и не мога да разбера грешката. Може ли някой да хвърли светлина върху същото.

Благодаря предварително, Вивек


person Vivek    schedule 20.09.2011    source източник
comment
Коя версия на Spring MVC? Можете ли да покажете подписа на метода с анотации?   -  person sinuhepop    schedule 20.09.2011
comment
Използвам Spring MVC версия 3 и подписът на метода е public void insertRecords(@RequestParam String id , @RequestParam String name , @RequestParam String addr)   -  person Vivek    schedule 22.09.2011


Отговори (2)


За да инжектирате стойността на параметъра на заявката във вашия параметър на метода на манипулатора, трябва да бъде изпълнено едно от следните

  1. Името на параметъра на заявката трябва да съвпада с името на параметъра на метода. напр. Следното ще инжектира параметъра на заявката с име „studentName“ в параметъра на метода studentName

    public String goToStep(@RequestParam String studentName)

  2. Името на параметъра на заявката трябва да бъде изрично указано, ако не съвпада с параметъра на метода. Следното ще инжектира параметър на заявка "nameOfStudent" в studentName:

    public String goToStep(@RequestParam("nameOfStudent") String studentName)

Моля, публикувайте кода на метода на манипулатора, ако проблемът продължава да съществува.

person Babu Subburathinam    schedule 20.09.2011
comment
Следвах очертаните указания и съответно всички имена на параметри са правилни. Моля, вижте споменатия по-долу код на метода на манипулатора. public void insertRecords(@RequestParam String id , @RequestParam String name , @RequestParam String addr) и съответният jsp има id атрибутите за всяко от текстовите полета според конвенцията за именуване на параметъра на метода. - person Vivek; 22.09.2011
comment
Проверете дали параметърът на заявката може да бъде достъпен от слоя сървлет. Подобно на това: code public void insertRecords(@RequestParam String id, @RequestParam String name, @RequestParam String addr, HttpServletRequest request) { System.out.println( request.getParameter( name )); // Не използвайте в производството } code Ако това отпечата null, тогава JSP не изпраща параметъра и публикуването на вашия съответен JSP код ще бъде полезно. Ако отпечата стойността, която очаквате, тогава знаем, че проблемът е в контролера. - person Babu Subburathinam; 23.09.2011

Поисках версията, която използвате, защото се сблъсках с подобен проблем преди няколко дни. Използвах Spring 3.1.0.M2 и същото изключение се появи, когато използвах @PathVariable в проксиран @Controller.

Причинено е от разрешен известен бъг. Просто трябва да преминете към 3.0.6 или да опитате нощната компилация 3.1.0.BUILD-SNAPSHOT. Разбира се, последният вариант не се препоръчва за производствена среда.

person sinuhepop    schedule 22.09.2011
comment
wwwoooowwwww....ще проверя това и ще актуализирам пространството тук.. благодаря за информацията... :) - person Vivek; 22.09.2011
comment
Благодаря много! Търсих навсякъде този неясен бъг и ако не беше твоята публикация, щях да прекарам много часове в опити да го разреша :) - person Leonti; 14.03.2012
comment
Нов съм в Spring и не знам как да включа 3.0.6 или 3.1.0.BUILD-SNAPSHOT. Използвам spring mvc. Каква е точната зависимост/процес за преминаване към това? Благодаря @sinuhepop - person ; 07.06.2020