Как установить имя параметра запроса в весеннем сервлете @RestController?

У меня есть простой @RestController и я хочу создать объект запроса, который содержит любые значения из запроса GET.

Более того, я хотел бы использовать имена переменных, отличные от имен параметров запроса get.

@RestController
public class MyServlet {
    @RequestMapping(value = "/start")
    public String start(@Valid MyRequest req) {
                Logger.log("IN");
        return req.getTest();
    }
}

public class MyRequest {
    @XmlElement(name = "asd")
    private String test;

    //getter, setter
}

Запрос: localhost:8080/start?asd=imhere

Результат: я вижу оператор журнала IN, поэтому сервлет работает. НО req Параметр нулевой. Почему?

Это работает, если я отправлю следующий URL: localhost:8080/start?test=imhere Итак, сервлет работает, но не переименование параметров.


person membersound    schedule 26.10.2016    source источник


Ответы (1)


Spring попытается построить ваш объект MyRequest с помощью сеттеров или отражения в закрытых переменных, поэтому переменная test будет заполнена только при отправке параметра test.

Из документации (@RequestMapping — поддерживается типы аргументов метода):

Командуйте или формируйте объекты для привязки параметров запроса к свойствам компонента (через сеттеры) или непосредственно к полям...

Изменить. Если вы хотите изменить имена, вам, вероятно, понадобится конвертер. Видеть:

  1. документы
  2. пример mvc
person slc84    schedule 26.10.2016
comment
Я знаю, и вопрос в том, как я могу изменить это и заставить Spring разрешить другое имя параметра? - person membersound; 26.10.2016
comment
Извините, я отвечал на ваш последний вопрос Why?. Я не думаю, что есть автоматический способ, я думаю, вам, вероятно, придется использовать преобразователи типов. Что-то вроде здесь выглядит полезным. - person slc84; 26.10.2016
comment
Хм, хорошо, я думал, что будет способ, основанный на аннотациях. - person membersound; 27.10.2016
comment
Вы всегда можете использовать установщик с именем параметра запроса и установить любое значение, которое вам нравится, но я не уверен, что вы получите. - person slc84; 27.10.2016