From d1708460e7b1a4a4a79ab9d97e83f8ad379cd2f3 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Wed, 6 May 2020 10:37:44 +0100 Subject: [PATCH] Log message for unused @ModelAttribute name Closes gh-23877 --- .../web/method/annotation/ModelFactory.java | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/web/method/annotation/ModelFactory.java b/spring-web/src/main/java/org/springframework/web/method/annotation/ModelFactory.java index 399d48029e..62af5c3e4a 100644 --- a/spring-web/src/main/java/org/springframework/web/method/annotation/ModelFactory.java +++ b/spring-web/src/main/java/org/springframework/web/method/annotation/ModelFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,9 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.springframework.beans.BeanUtils; import org.springframework.core.Conventions; import org.springframework.core.GenericTypeResolver; @@ -58,6 +61,9 @@ import org.springframework.web.method.support.ModelAndViewContainer; */ public final class ModelFactory { + private static final Log logger = LogFactory.getLog(ModelFactory.class); + + private final List modelMethods = new ArrayList<>(); private final WebDataBinderFactory dataBinderFactory; @@ -135,14 +141,22 @@ public final class ModelFactory { } Object returnValue = modelMethod.invokeForRequest(request, container); - if (!modelMethod.isVoid()){ - String returnValueName = getNameForReturnValue(returnValue, modelMethod.getReturnType()); - if (!ann.binding()) { - container.setBindingDisabled(returnValueName); - } - if (!container.containsAttribute(returnValueName)) { - container.addAttribute(returnValueName, returnValue); + if (modelMethod.isVoid()) { + if (StringUtils.hasText(ann.value())) { + if (logger.isDebugEnabled()) { + logger.debug("Name in @ModelAttribute is ignored because method returns void: " + + modelMethod.getShortLogMessage()); + } } + continue; + } + + String returnValueName = getNameForReturnValue(returnValue, modelMethod.getReturnType()); + if (!ann.binding()) { + container.setBindingDisabled(returnValueName); + } + if (!container.containsAttribute(returnValueName)) { + container.addAttribute(returnValueName, returnValue); } } }