diff --git a/spring-context/src/main/java/org/springframework/validation/MessageCodeFormatter.java b/spring-context/src/main/java/org/springframework/validation/MessageCodeFormatter.java index d85b43cd99c..a2c1a960819 100644 --- a/spring-context/src/main/java/org/springframework/validation/MessageCodeFormatter.java +++ b/spring-context/src/main/java/org/springframework/validation/MessageCodeFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2018 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. @@ -29,8 +29,8 @@ import org.springframework.lang.Nullable; public interface MessageCodeFormatter { /** - * Build and return a message code consisting of the given fields, usually delimited - * by {@link DefaultMessageCodesResolver#CODE_SEPARATOR}. + * Build and return a message code consisting of the given fields, + * usually delimited by {@link DefaultMessageCodesResolver#CODE_SEPARATOR}. * @param errorCode e.g.: "typeMismatch" * @param objectName e.g.: "user" * @param field e.g. "age" @@ -38,4 +38,5 @@ public interface MessageCodeFormatter { * @see DefaultMessageCodesResolver.Format */ String format(String errorCode, @Nullable String objectName, @Nullable String field); -} \ No newline at end of file + +} diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/BindStatus.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/BindStatus.java index 5ff4e696b69..85781d43e94 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/BindStatus.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/BindStatus.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 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. @@ -41,6 +41,7 @@ import org.springframework.web.util.HtmlUtils; * tags and macros, the same status class is used for both scenarios. * * @author Rossen Stoyanchev + * @author Juergen Hoeller * @since 5.0 * @see RequestContext#getBindStatus */ @@ -58,9 +59,13 @@ public class BindStatus { @Nullable private final Errors errors; + private final String[] errorCodes; @Nullable - private BindingResult bindingResult; + private String[] errorMessages; + + @Nullable + private List objectErrors; @Nullable private Object value; @@ -75,12 +80,7 @@ public class BindStatus { private PropertyEditor editor; @Nullable - private List objectErrors; - - private String[] errorCodes = new String[0]; - - @Nullable - private String[] errorMessages; + private BindingResult bindingResult; /** @@ -91,9 +91,7 @@ public class BindStatus { * @param htmlEscape whether to HTML-escape error messages and string values * @throws IllegalStateException if no corresponding Errors object found */ - public BindStatus(RequestContext requestContext, String path, boolean htmlEscape) - throws IllegalStateException { - + public BindStatus(RequestContext requestContext, String path, boolean htmlEscape) throws IllegalStateException { this.requestContext = requestContext; this.path = path; this.htmlEscape = htmlEscape; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/View.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/View.java index 83c93112c7e..1e50933db90 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/View.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/View.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 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. @@ -16,6 +16,7 @@ package org.springframework.web.reactive.result.view; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -46,7 +47,9 @@ public interface View { /** * Return the list of media types this View supports, or an empty list. */ - List getSupportedMediaTypes(); + default List getSupportedMediaTypes() { + return Collections.emptyList(); + } /** * Whether this View does rendering by performing a redirect. diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/View.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/View.java index 8598e83f841..a58ed5a672f 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/View.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/View.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2018 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. @@ -17,11 +17,9 @@ package org.springframework.web.servlet; import java.util.Map; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.springframework.http.MediaType; import org.springframework.lang.Nullable; /** @@ -41,6 +39,7 @@ import org.springframework.lang.Nullable; * * @author Rod Johnson * @author Arjen Poutsma + * @author Rossen Stoyanchev * @see org.springframework.web.servlet.view.AbstractView * @see org.springframework.web.servlet.view.InternalResourceView */ @@ -49,6 +48,7 @@ public interface View { /** * Name of the {@link HttpServletRequest} attribute that contains the response status code. *

Note: This attribute is not required to be supported by all View implementations. + * @since 3.0 */ String RESPONSE_STATUS_ATTRIBUTE = View.class.getName() + ".responseStatus"; @@ -56,41 +56,44 @@ public interface View { * Name of the {@link HttpServletRequest} attribute that contains a Map with path variables. * The map consists of String-based URI template variable names as keys and their corresponding * Object-based values -- extracted from segments of the URL and type converted. - * *

Note: This attribute is not required to be supported by all View implementations. + * @since 3.1 */ String PATH_VARIABLES = View.class.getName() + ".pathVariables"; /** - * The {@link MediaType} selected during content negotiation, which may be - * more specific than the one the View is configured with. For example: + * The {@link org.springframework.http.MediaType} selected during content negotiation, + * which may be more specific than the one the View is configured with. For example: * "application/vnd.example-v1+xml" vs "application/*+xml". + * @since 3.2 */ String SELECTED_CONTENT_TYPE = View.class.getName() + ".selectedContentType"; + /** * Return the content type of the view, if predetermined. - *

Can be used to check the content type upfront, - * before the actual rendering process. + *

Can be used to check the view's content type upfront, + * i.e. before an actual rendering attempt. * @return the content type String (optionally including a character set), - * or {@code null} if not predetermined. + * or {@code null} if not predetermined */ @Nullable - String getContentType(); + default String getContentType() { + return null; + } /** * Render the view given the specified model. - *

The first step will be preparing the request: In the JSP case, - * this would mean setting model objects as request attributes. - * The second step will be the actual rendering of the view, - * for example including the JSP via a RequestDispatcher. + *

The first step will be preparing the request: In the JSP case, this would mean + * setting model objects as request attributes. The second step will be the actual + * rendering of the view, for example including the JSP via a RequestDispatcher. * @param model Map with name Strings as keys and corresponding model * objects as values (Map can also be {@code null} in case of empty model) * @param request current HTTP request * @param response HTTP response we are building * @throws Exception if rendering failed */ - void render(@Nullable Map model, - HttpServletRequest request, HttpServletResponse response) throws Exception; + void render(@Nullable Map model, HttpServletRequest request, HttpServletResponse response) + throws Exception; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/BindStatus.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/BindStatus.java index 7dce89a0962..084b7557e17 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/BindStatus.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/BindStatus.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2018 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. @@ -61,8 +61,13 @@ public class BindStatus { @Nullable private final Errors errors; + private final String[] errorCodes; + @Nullable - private BindingResult bindingResult; + private String[] errorMessages; + + @Nullable + private List objectErrors; @Nullable private Object value; @@ -77,12 +82,7 @@ public class BindStatus { private PropertyEditor editor; @Nullable - private List objectErrors; - - private String[] errorCodes = new String[0]; - - @Nullable - private String[] errorMessages; + private BindingResult bindingResult; /** @@ -141,7 +141,7 @@ public class BindStatus { else { this.objectErrors = this.errors.getGlobalErrors(); } - initErrorCodes(this.objectErrors); + this.errorCodes = initErrorCodes(this.objectErrors); } else { @@ -171,12 +171,13 @@ public class BindStatus { /** * Extract the error codes from the ObjectError list. */ - private void initErrorCodes(List objectErrors) { - this.errorCodes = new String[objectErrors.size()]; + private static String[] initErrorCodes(List objectErrors) { + String[] errorCodes = new String[objectErrors.size()]; for (int i = 0; i < objectErrors.size(); i++) { ObjectError error = objectErrors.get(i); - this.errorCodes[i] = error.getCode(); + errorCodes[i] = error.getCode(); } + return errorCodes; }