Должно ли разрешение параметра POJO по умолчанию добавить параметр в модель? - PullRequest
0 голосов
/ 07 сентября 2018

Я просто потратил некоторое время на устранение неполадок в аспекте разрешения параметров метода-обработчика по умолчанию в Spring MVC, и я хотел бы спросить тех, кто ближе к проекту, является ли это намерением или было бы разумно открыть заявку, предлагающую изменение .

Проблема связана с разрешением по умолчанию объектов в стиле POJO в параметрах метода, например так:

@RequestMapping("/endpointwithparams")
public String endpointWithParams(EndpointParams params) {
  // Do some stuff
  return "viewname";
}

Без аннотаций или специальных средств разрешения аргументов Spring будет пытаться связать объект EndpointParams путем сопоставления параметров запроса с именами его полей. Он даже запускает валидаторы, если таковые настроены. Это кажется великолепным - это позволяет мне писать простые объекты POJO для организации связанных наборов параметров без необходимости иметь собственный преобразователь аргументов для каждого из них.

Часть, которая меня отбрасывает, заключается в том, что после создания объекта EndpointParams он будет также автоматически добавляться в модель. Это связано с тем, что фактическим преобразователем этого параметра будет ModelAttributeMethodProcessor с установленным в true значением флага annotationNotRequired. Я не хочу, чтобы этот параметр был добавлен в модель - его наличие вызывает некоторые проблемы в будущем - и мне определенно не было интуитивно понятно, что я должен ожидать, что это дополнение произойдет для параметра, который не был аннотирован @ModelAttribute.

Это поведение также не согласуется с тем, что происходит, когда у вас есть «простой» параметр запроса, подобный этому:

@RequestMapping("/endpointwithparams")
public String endpointWithParams(String param) {
  // Do some stuff
  return "viewname";
}

В приведенном выше примере параметр String будет разрешен с помощью RequestParamMethodArgumentResolver, который не добавит что-либо к модели.

Разумно ли предположить, что лучшая логика по умолчанию для неаннотированных параметров POJO будет такой же привязкой и проверкой, что и в настоящее время, но без автоматического добавления в модель? Или есть какой-то контекст, который мне не хватает, что делает полное поведение @ModelAttribute лучшим выбором по умолчанию?

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