我有一个1600行长的控制器.这主要是由一堆带有@modelattribute批注的公共方法填充的.它还有一些@RequestMapping方法.
我想减少行数并分班.如何使用@modelattribute批注处理多个公共方法?它们不是在处理请求时都被调用吗?
最佳答案
I have a controller that is 1600 lines long
喝了
How do you handle multiple public methods with
@modelattribute
annotation? Aren’t they all invoked whenever a request is processed?
当用于对方法进行注释时,此注释指示应使用该方法的返回值填充该控制器类执行的每个请求的模型,而不考虑执行哪个@RequestMapping方法.
我的建议是执行审计,以查看哪些视图(例如JSP)使用各种@modelattribute方法提供的模型数据.每个视图可能仅使用该数据的子集.
一旦弄清楚了@modelattribute和@RequestMapping方法的组合,然后将它们分解为单独的类.
如果那不可行(也许所有视图确实都使用了所有数据),则可以考虑从类中完全提取@modelattribute方法,并使用将它们的输出手动合并在一起的单个方法将它们缝合在一起(例如将Model或ModelMap对象从@RequestMapping方法传递到此新方法,然后将模型的位添加到该对象.
请记住,带@modelattribute注释的方法只是添加额外模型数据的便捷方法.它们不是唯一的方法.