слишком много открытых методов с @ModelAttribute - PullRequest
3 голосов
/ 29 января 2012

У меня есть контроллер длиной 1600 строк. В основном это заполнено множеством открытых методов с аннотацией @ModelAttribute. Он также имеет несколько @RequestMapping методов.

Я бы хотел уменьшить количество строк и разбить этот класс. Как вы обрабатываете несколько открытых методов с аннотацией @ModelAttribute? Разве они не вызываются каждый раз, когда обрабатывается запрос?

Ответы [ 3 ]

2 голосов
/ 30 января 2012

У меня есть контроллер длиной 1600 строк

Gulp.

Как вы обрабатываете несколько открытых методов с аннотацией @ModelAttribute?Разве все они не вызываются при обработке запроса?

Когда используется для аннотирования метода, эта аннотация указывает, что возвращаемое значение метода должно использоваться для заполнения модели для каждого запроса, выполняемого этим контроллером.class, независимо от того, какой метод @RequestMapping выполняется.

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

Как только вы выяснили, какие комбинации методов @ModelAttribute и @RequestMapping идут вместе, затем разбейте их на отдельные классы.

Если это не сработало (может быть, все представления действительно используют все данные), тогда рассмотрите возможность извлечения методов @ModelAttribute из класса в целом и объединения их вместе, используя один метод, который объединяет их выходные данныевместе вручную (например, передайте объект Model или ModelMap из метода @RequestMapping этому новому методу, который затем добавляет биты модели к этому объекту.

Помните, @ModelAttribute -аннотированные методыэто просто удобный способ добавления дополнительных данных модели. Это не единственный способ.

1 голос
/ 03 февраля 2012
Методы

@ ModelAttribute также могут возвращать void:

@ModelAttribute
public void populateModel(Model model) {
    model.addAttribute("key", "value");
    // keep adding any number of attributes...
}
0 голосов
/ 30 января 2012

Не можете ли вы сгруппировать несколько @ModelAttribute вместе?Например, если у вас есть три метода, по одному для извлечения значений из трех разных полей выбора, вы, возможно, можете поместить их все в один метод.

...