⭐ New Features
- Add support for configuring ObjectMapper's default typing using Jackson2ObjectMapperBuilder [SPR-13569] #18145
- Compatibility with GlassFish 4.1.1 / Tyrus 1.12 [SPR-13566] #18142
- Improve error reporting in StandardScriptEvaluator [SPR-13557] #18133
- Protect against RFD exploits [SPR-13548] #18124
- Provide empty Model to
@ExceptionHandler
methods [SPR-13546] #18122 - Throw exception with meaningful message if JUnit 4.9+ not present [SPR-13521] #18098
- Improve org.springframework.util.StopWatch [SPR-13509] #18087
- SseEmitter should ignore calls to send after timeout [SPR-13498] #18076
- Make UndertowRequestUpgradeStrategy compatible with Undertow 1.3 [SPR-13494] #18072
- Revise script engine retrieval for better error reporting [SPR-13491] #18069
- Improve error reporting for template rendering in ScriptTemplateView [SPR-13488] #18066
- Consider Nashorn ScriptEngine instance scope in ScriptTemplateView [SPR-13487] #18065
- Origins doesn't anticipate an Origin header with a path [SPR-13478] #18057
- Support
@CrossOrigin
as a merged composed annotation [SPR-13468] #18047 - Same origin stops working for WebSocket/SockJS once any origin is configured [SPR-13464] #18044
- Add 'null-value' attribute to context:property-placeholder [SPR-13461] #18041
- Expose view url to render function in ScriptTemplateView [SPR-13453] #18033
- SseEmitter does not expose super constructor with timeout value [SPR-13446] #18026
- Read large data using InputStreamResource at ResourceHttpMessageConverter [SPR-13443] #18023
- Support
@ResponseStatus
as a merged composed annotation [SPR-13441] #18021 - Double slashes (optional Path variable) removed via MockHttpServletRequestBuilder [SPR-13435] #18014
- ClasspathXmlApplicationContext cannot be closed twice [SPR-13425] #18004
- Make UndertowXhrTransport compatible with Undertow 1.3 [SPR-13366] #17950
- Jackson2ObjectMapperFactoryBean.setAutoDetectGettersSetters(boolean) does not affect "is" getters [SPR-13073] #17665
- Support for last-modified resolution in Tomcat's unpackwar=false mode [SPR-13393] #17434
- RequestResponseBodyMethodProcessor should turn IOException to HttpMessageNotReadableException [SPR-12745] #17342
- Better handling of illegal locale values in LocaleChangeInterceptor [SPR-9456] #14091
- Add valueSeparator property to context:property-placeholder [SPR-7794] #12450
🪲 Bug Fixes
- Clarify whether HttpInputMessage.getBody() is allowed to return null [SPR-13563] #18139
- Close processing triggered by shutdown hook isn't thread safe [SPR-13556] #18132
- DefaultSubscriptionRegistry loses track of subscribers in its cache [SPR-13555] #18131
- JCacheCache doesn't recognize null values in other JVMs [SPR-13553] #18129
- Modifications to UndertowXhrTransport for Undertow 1.3 introduce breaking changes [SPR-13551] #18127
- Consistently detect spring-beans.dtd reference [SPR-13549] #18125
- Null Pointer when receiving an invalid transport type during SockJS request [SPR-13545] #18121
- PayloadApplicationEvent can't hit cache [SPR-13543] #18119
- MessageHeaders is declared immutable - but writeObject() removes any non-serializable fields [SPR-13541] #18117
- OutOfMemory Exception when publishing User Events [SPR-13540] #18116
- Spring incorrectly interprets a bean to be a spring eventlistener [SPR-13538] #18114
- ClassNotFoundException: org.xnio.StreamConnection in Wildfly 10.0.0.CR2 [SPR-13529] #18106
- EventListenerMethodProcessor unconditionally instantiates certain beans, leading to BeanCreationException during deployment [SPR-13526] #18103
- Not valid processing of 'Origin' http header [SPR-13525] #18102
- HtmlUnitRequestBuilder doesn't handle query parameters without equals sign [SPR-13524] #18101
- ResourceHttpRequestHandler fails with IllegalArgumentException: No matching constant for [0] [SPR-13516] #18093
- YamlProcessor subclasses can no longer instantiate StrictMapAppenderConstructor [SPR-13504] #18082
- ETag/If-None-Match logic in HttpEntityMethodProcessor should not affect methods other than HTTP GET [SPR-13496] #18074
- ConcurrentModificationException when executing AutowireCapableBeanFactory.createBean [SPR-13493] #18071
- Potential double invocation of getMissingCache in AbstractCacheManager [SPR-13492] #18070
- AbstractEmbeddedDatabaseConfigurer.shutdown does not close JDBC resources [SPR-13474] #18053
- ConcurrentMapCache.putIfAbsent doesn't support null values [SPR-13458] #18038
- Regression: UrlPathHelper.getLookupPathForRequest(…) returns different results for URIs containing matrix parameters [SPR-13455] #18035
- DeferredResult not thread-safe for isSetOrExpired call [SPR-13451] #18031
- MessagingException should not provide empty description String to NestedRuntimeException [SPR-13447] #18027
- ScriptTemplateView should close the template InputStream [SPR-13445] #18025
- ConcurrentModificationException in SingleConnectionFactory$AggregatedExceptionListener [SPR-13421] #18000
- ServletWebRequest.checkNotModified attempts to call HttpServletResponse.getHeader(String) on Servlet 2.5 [SPR-13420] #17999
- Regression:
@RequestBody
(required = false) not respected [SPR-13417] #17996 - StompDecoder fails for partial headers containing escape sequence [SPR-13416] #17995
- ConcurrentModificationException when doing a merge on AbstractEnvironment [SPR-13213] #17805
- ConcurrentModificationException in DefaultListableBeanFactory.doGetBeanNamesForType() [SPR-13123] #17714
- Registering two beans at the same time throws ConcurrentModificationException [SPR-12503] #17108