Как связать параметры запроса весной 3.0? - PullRequest
4 голосов
/ 25 августа 2011

Я создаю контроллер, который принимает запрос от стороннего сервиса. У этой службы есть запрос на 5 параметров, которые мне нужно привязать к классу Message.

Скажите, я в запросе, я получаю

?a=x&b=y&c=z&d=w&e=k&f=t

Класс сообщения

public class Message{
 String a;
 String b;
 String c;
 String d;
 String e;
 String f;
 public Message(String a, String b, String c, String d, String e, String f){
     this.a=a;this.b=b;this.c=c;this.d=d;this.e=e;this.f=f;
 }
 ....// along with getters and setters
}

Один из вариантов - использовать @RequestParam в контроллере метода, но тогда мне придется передать все параметры, а затем создать экземпляр объекта Message вручную. Я не хочу этого делать, потому что количество параметров слишком велико.

Можно ли это сделать, используя привязку инициализации / привязку веб-данных? и как?

Ответы [ 3 ]

7 голосов
/ 26 августа 2011

Вам не нужно делать ничего особенного, чтобы сделать эту работу, просто объявите параметр Message для вашего метода контроллера:

@RequestMapping
public String handleRequest(Message message) {
   ...
}

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

0 голосов
/ 29 сентября 2015

Вы можете сделать это без какой-либо специальной работы, просто перечислите объект, который вам нужен, и тогда Spring аккуратно свяжет параметры вашего запроса с вашим экземпляром класса.

0 голосов
/ 25 августа 2011

Я думаю, вам просто нужно передать объект Message в качестве параметра для метода-обработчика контроллера, и привязка происходит автоматически.Ваша строка параметров запроса должна быть такой: ?a=x&b=y&c=z&d=w&e=&f=, потому что если у вас есть ?param=a&param=b&param=c, тогда ваш объект сообщения должен быть:

class Message {
    List<String> param; // ends up holding strings "a","b","c",...
}

Это не то, что вы хотите (посколькуЯ вижу).

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