Browse Source

Polishing

pull/464/head
Juergen Hoeller 11 years ago
parent
commit
0ec99fdef7
  1. 12
      spring-web/src/main/java/org/springframework/web/method/HandlerMethod.java
  2. 18
      spring-web/src/main/java/org/springframework/web/util/UrlPathHelper.java
  3. 13
      spring-web/src/test/java/org/springframework/web/method/support/InvocableHandlerMethodTests.java
  4. 13
      spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractView.java

12
spring-web/src/main/java/org/springframework/web/method/HandlerMethod.java

@ -30,13 +30,13 @@ import org.springframework.util.Assert; @@ -30,13 +30,13 @@ import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
/**
* Encapsulates information about a bean method consisting of a {@link #getMethod() method}
* and a {@link #getBean() bean}. Provides convenient access to method parameters,
* Encapsulates information about a handler method consisting of a {@linkplain #getMethod() method}
* and a {@linkplain #getBean() bean}. Provides convenient access to method parameters,
* method return value, method annotations.
*
* <p>The class may be created with a bean instance or with a bean name (e.g. lazy bean,
* prototype bean). Use {@link #createWithResolvedBean()} to obtain an {@link HandlerMethod}
* instance with a bean instance initialized through the bean factory.
* <p>The class may be created with a bean instance or with a bean name (e.g. lazy-init bean,
* prototype bean). Use {@link #createWithResolvedBean()} to obtain a {@link HandlerMethod}
* instance with a bean instance resolved through the associated {@link BeanFactory}.
*
* @author Arjen Poutsma
* @author Rossen Stoyanchev
@ -228,7 +228,7 @@ public class HandlerMethod { @@ -228,7 +228,7 @@ public class HandlerMethod {
}
if (obj != null && obj instanceof HandlerMethod) {
HandlerMethod other = (HandlerMethod) obj;
return this.bean.equals(other.bean) && this.method.equals(other.method);
return (this.bean.equals(other.bean) && this.method.equals(other.method));
}
return false;
}

18
spring-web/src/main/java/org/springframework/web/util/UrlPathHelper.java

@ -22,11 +22,11 @@ import java.util.LinkedHashMap; @@ -22,11 +22,11 @@ import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.util.StringUtils;
@ -187,17 +187,17 @@ public class UrlPathHelper { @@ -187,17 +187,17 @@ public class UrlPathHelper {
// e.g. with index page: URI="/", servletPath="/index.html"
return pathInfo;
}
if (this.urlDecode == false) {
if (!this.urlDecode) {
// No path info... (not mapped by prefix, nor by extension, nor "/*")
// For the default servlet mapping (i.e. "/"), urlDecode=false can
// cause issues since getServletPath() returns a decoded path.
// If decoding pathWithinApp yields a match just use pathWithinApp
// If decoding pathWithinApp yields a match just use pathWithinApp.
path = getRemainingPath(decodeInternal(request, pathWithinApp), servletPath, false);
if (path != null) {
return pathWithinApp;
}
}
// Otherwise, use the full servlet path
// Otherwise, use the full servlet path.
return servletPath;
}
}
@ -230,7 +230,7 @@ public class UrlPathHelper { @@ -230,7 +230,7 @@ public class UrlPathHelper {
private String getRemainingPath(String requestUri, String mapping, boolean ignoreCase) {
int index1 = 0;
int index2 = 0;
for ( ; (index1 < requestUri.length()) && (index2 < mapping.length()); index1++, index2++) {
for (; (index1 < requestUri.length()) && (index2 < mapping.length()); index1++, index2++) {
char c1 = requestUri.charAt(index1);
char c2 = mapping.charAt(index2);
if (c1 == ';') {
@ -257,7 +257,7 @@ public class UrlPathHelper { @@ -257,7 +257,7 @@ public class UrlPathHelper {
else if (requestUri.charAt(index1) == ';') {
index1 = requestUri.indexOf('/', index1);
}
return (index1 != -1) ? requestUri.substring(index1) : "";
return (index1 != -1 ? requestUri.substring(index1) : "");
}
/**
@ -312,8 +312,7 @@ public class UrlPathHelper { @@ -312,8 +312,7 @@ public class UrlPathHelper {
if (servletPath == null) {
servletPath = request.getServletPath();
}
if (servletPath.length() > 1 && servletPath.endsWith("/") &&
shouldRemoveTrailingServletPathSlash(request)) {
if (servletPath.length() > 1 && servletPath.endsWith("/") && shouldRemoveTrailingServletPathSlash(request)) {
// On WebSphere, in non-compliant mode, for a "/foo/" case that would be "/foo"
// on all other servlet containers: removing trailing slash, proceeding with
// that remaining slash as final lookup path...
@ -449,7 +448,6 @@ public class UrlPathHelper { @@ -449,7 +448,6 @@ public class UrlPathHelper {
* Remove ";" (semicolon) content from the given request URI if the
* {@linkplain #setRemoveSemicolonContent(boolean) removeSemicolonContent}
* property is set to "true". Note that "jssessionid" is always removed.
*
* @param requestUri the request URI string to remove ";" content from
* @return the updated URI string
*/
@ -486,7 +484,6 @@ public class UrlPathHelper { @@ -486,7 +484,6 @@ public class UrlPathHelper {
* assumed the URL path from which the variables were extracted is already
* decoded through a call to
* {@link #getLookupPathForRequest(HttpServletRequest)}.
*
* @param request current HTTP request
* @param vars URI variables extracted from the URL path
* @return the same Map or a new Map instance
@ -511,7 +508,6 @@ public class UrlPathHelper { @@ -511,7 +508,6 @@ public class UrlPathHelper {
* assumed the URL path from which the variables were extracted is already
* decoded through a call to
* {@link #getLookupPathForRequest(HttpServletRequest)}.
*
* @param request current HTTP request
* @param vars URI variables extracted from the URL path
* @return the same Map or a new Map instance

13
spring-web/src/test/java/org/springframework/web/method/support/InvocableHandlerMethodTests.java

@ -45,6 +45,7 @@ public class InvocableHandlerMethodTests { @@ -45,6 +45,7 @@ public class InvocableHandlerMethodTests {
private NativeWebRequest webRequest;
@Before
public void setUp() throws Exception {
Method method = Handler.class.getDeclaredMethod("handle", Integer.class, String.class);
@ -52,6 +53,7 @@ public class InvocableHandlerMethodTests { @@ -52,6 +53,7 @@ public class InvocableHandlerMethodTests {
this.webRequest = new ServletWebRequest(new MockHttpServletRequest(), new MockHttpServletResponse());
}
@Test
public void resolveArg() throws Exception {
StubArgumentResolver intResolver = new StubArgumentResolver(Integer.class, 99);
@ -63,11 +65,9 @@ public class InvocableHandlerMethodTests { @@ -63,11 +65,9 @@ public class InvocableHandlerMethodTests {
handlerMethod.setHandlerMethodArgumentResolvers(composite);
Object returnValue = handlerMethod.invokeForRequest(webRequest, null);
assertEquals(1, intResolver.getResolvedParameters().size());
assertEquals(1, stringResolver.getResolvedParameters().size());
assertEquals("99-value", returnValue);
assertEquals("intArg", intResolver.getResolvedParameters().get(0).getParameterName());
assertEquals("stringArg", stringResolver.getResolvedParameters().get(0).getParameterName());
}
@ -83,7 +83,6 @@ public class InvocableHandlerMethodTests { @@ -83,7 +83,6 @@ public class InvocableHandlerMethodTests {
handlerMethod.setHandlerMethodArgumentResolvers(composite);
Object returnValue = handlerMethod.invokeForRequest(webRequest, null);
assertEquals(1, intResolver.getResolvedParameters().size());
assertEquals(1, stringResolver.getResolvedParameters().size());
assertEquals("null-null", returnValue);
@ -119,7 +118,6 @@ public class InvocableHandlerMethodTests { @@ -119,7 +118,6 @@ public class InvocableHandlerMethodTests {
handlerMethod.setHandlerMethodArgumentResolvers(composite);
Object returnValue = handlerMethod.invokeForRequest(webRequest, null, 2, "value2");
assertEquals("2-value2", returnValue);
}
@ -134,8 +132,7 @@ public class InvocableHandlerMethodTests { @@ -134,8 +132,7 @@ public class InvocableHandlerMethodTests {
fail("Expected exception");
}
catch (HttpMessageNotReadableException ex) {
// Expected..
// Allow HandlerMethodArgumentResolver exceptions to propagate..
// expected - allow HandlerMethodArgumentResolver exceptions to propagate
}
}
@ -208,6 +205,7 @@ public class InvocableHandlerMethodTests { @@ -208,6 +205,7 @@ public class InvocableHandlerMethodTests {
fail("Expected exception");
}
@SuppressWarnings("unused")
private static class Handler {
@ -216,6 +214,7 @@ public class InvocableHandlerMethodTests { @@ -216,6 +214,7 @@ public class InvocableHandlerMethodTests {
}
}
@SuppressWarnings("unused")
private static class ExceptionRaisingHandler {
@ -228,9 +227,9 @@ public class InvocableHandlerMethodTests { @@ -228,9 +227,9 @@ public class InvocableHandlerMethodTests {
public void raiseException() throws Throwable {
throw t;
}
}
private static class ExceptionRaisingArgumentResolver implements HandlerMethodArgumentResolver {
@Override

13
spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractView.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2014 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.
@ -74,6 +74,7 @@ public abstract class AbstractView extends WebApplicationObjectSupport implement @@ -74,6 +74,7 @@ public abstract class AbstractView extends WebApplicationObjectSupport implement
/** Whether or not the view should add path variables in the model */
private boolean exposePathVariables = true;
/**
* Set the view's name. Helpful for traceability.
* <p>Framework code must call this when constructing views.
@ -244,9 +245,10 @@ public abstract class AbstractView extends WebApplicationObjectSupport implement @@ -244,9 +245,10 @@ public abstract class AbstractView extends WebApplicationObjectSupport implement
* Returns the value of the flag indicating whether path variables should be added to the model or not.
*/
public boolean isExposePathVariables() {
return exposePathVariables;
return this.exposePathVariables;
}
/**
* Prepares the view given the specified model, merging it with static
* attributes and a RequestContext attribute, if necessary.
@ -261,7 +263,6 @@ public abstract class AbstractView extends WebApplicationObjectSupport implement @@ -261,7 +263,6 @@ public abstract class AbstractView extends WebApplicationObjectSupport implement
}
Map<String, Object> mergedModel = createMergedOutputModel(model, request, response);
prepareResponse(request, response);
renderMergedOutputModel(mergedModel, request, response);
}
@ -271,11 +272,11 @@ public abstract class AbstractView extends WebApplicationObjectSupport implement @@ -271,11 +272,11 @@ public abstract class AbstractView extends WebApplicationObjectSupport implement
* Dynamic values take precedence over static attributes.
*/
protected Map<String, Object> createMergedOutputModel(Map<String, ?> model, HttpServletRequest request,
HttpServletResponse response) {
@SuppressWarnings("unchecked")
Map<String, Object> pathVars = this.exposePathVariables ?
(Map<String, Object>) request.getAttribute(View.PATH_VARIABLES) : null;
Map<String, Object> pathVars = (this.exposePathVariables ?
(Map<String, Object>) request.getAttribute(View.PATH_VARIABLES) : null);
// Consolidate static and dynamic model attributes.
int size = this.staticAttributes.size();

Loading…
Cancel
Save