Avoid defensive checks against java.time API
Issue: SPR-13188
This commit is contained in:
parent
a0fee4657d
commit
85b0ce1ef7
|
@ -26,6 +26,7 @@ import java.net.URI;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
import java.time.ZoneId;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Currency;
|
import java.util.Currency;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -89,19 +90,6 @@ import org.springframework.util.ClassUtils;
|
||||||
*/
|
*/
|
||||||
public class PropertyEditorRegistrySupport implements PropertyEditorRegistry {
|
public class PropertyEditorRegistrySupport implements PropertyEditorRegistry {
|
||||||
|
|
||||||
private static Class<?> zoneIdClass;
|
|
||||||
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
zoneIdClass = ClassUtils.forName("java.time.ZoneId", PropertyEditorRegistrySupport.class.getClassLoader());
|
|
||||||
}
|
|
||||||
catch (ClassNotFoundException ex) {
|
|
||||||
// Java 8 ZoneId class not available
|
|
||||||
zoneIdClass = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private ConversionService conversionService;
|
private ConversionService conversionService;
|
||||||
|
|
||||||
private boolean defaultEditorsActive = false;
|
private boolean defaultEditorsActive = false;
|
||||||
|
@ -222,9 +210,7 @@ public class PropertyEditorRegistrySupport implements PropertyEditorRegistry {
|
||||||
this.defaultEditors.put(URI.class, new URIEditor());
|
this.defaultEditors.put(URI.class, new URIEditor());
|
||||||
this.defaultEditors.put(URL.class, new URLEditor());
|
this.defaultEditors.put(URL.class, new URLEditor());
|
||||||
this.defaultEditors.put(UUID.class, new UUIDEditor());
|
this.defaultEditors.put(UUID.class, new UUIDEditor());
|
||||||
if (zoneIdClass != null) {
|
this.defaultEditors.put(ZoneId.class, new ZoneIdEditor());
|
||||||
this.defaultEditors.put(zoneIdClass, new ZoneIdEditor());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Default instances of collection editors.
|
// Default instances of collection editors.
|
||||||
// Can be overridden by registering custom instances of those as custom editors.
|
// Can be overridden by registering custom instances of those as custom editors.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2015 the original author or authors.
|
* Copyright 2002-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -21,10 +21,10 @@ import org.springframework.format.FormatterRegistry;
|
||||||
import org.springframework.format.datetime.DateFormatterRegistrar;
|
import org.springframework.format.datetime.DateFormatterRegistrar;
|
||||||
import org.springframework.format.datetime.joda.JodaTimeFormatterRegistrar;
|
import org.springframework.format.datetime.joda.JodaTimeFormatterRegistrar;
|
||||||
import org.springframework.format.datetime.standard.DateTimeFormatterRegistrar;
|
import org.springframework.format.datetime.standard.DateTimeFormatterRegistrar;
|
||||||
|
import org.springframework.format.number.NumberFormatAnnotationFormatterFactory;
|
||||||
import org.springframework.format.number.money.CurrencyUnitFormatter;
|
import org.springframework.format.number.money.CurrencyUnitFormatter;
|
||||||
import org.springframework.format.number.money.Jsr354NumberFormatAnnotationFormatterFactory;
|
import org.springframework.format.number.money.Jsr354NumberFormatAnnotationFormatterFactory;
|
||||||
import org.springframework.format.number.money.MonetaryAmountFormatter;
|
import org.springframework.format.number.money.MonetaryAmountFormatter;
|
||||||
import org.springframework.format.number.NumberFormatAnnotationFormatterFactory;
|
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
import org.springframework.util.StringValueResolver;
|
import org.springframework.util.StringValueResolver;
|
||||||
|
|
||||||
|
@ -49,9 +49,6 @@ public class DefaultFormattingConversionService extends FormattingConversionServ
|
||||||
private static final boolean jsr354Present = ClassUtils.isPresent(
|
private static final boolean jsr354Present = ClassUtils.isPresent(
|
||||||
"javax.money.MonetaryAmount", DefaultFormattingConversionService.class.getClassLoader());
|
"javax.money.MonetaryAmount", DefaultFormattingConversionService.class.getClassLoader());
|
||||||
|
|
||||||
private static final boolean jsr310Present = ClassUtils.isPresent(
|
|
||||||
"java.time.LocalDate", DefaultFormattingConversionService.class.getClassLoader());
|
|
||||||
|
|
||||||
private static final boolean jodaTimePresent = ClassUtils.isPresent(
|
private static final boolean jodaTimePresent = ClassUtils.isPresent(
|
||||||
"org.joda.time.LocalDate", DefaultFormattingConversionService.class.getClassLoader());
|
"org.joda.time.LocalDate", DefaultFormattingConversionService.class.getClassLoader());
|
||||||
|
|
||||||
|
@ -112,10 +109,10 @@ public class DefaultFormattingConversionService extends FormattingConversionServ
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default handling of date-time values
|
// Default handling of date-time values
|
||||||
if (jsr310Present) {
|
|
||||||
// just handling JSR-310 specific date and time types
|
// just handling JSR-310 specific date and time types
|
||||||
new DateTimeFormatterRegistrar().registerFormatters(formatterRegistry);
|
new DateTimeFormatterRegistrar().registerFormatters(formatterRegistry);
|
||||||
}
|
|
||||||
if (jodaTimePresent) {
|
if (jodaTimePresent) {
|
||||||
// handles Joda-specific types as well as Date, Calendar, Long
|
// handles Joda-specific types as well as Date, Calendar, Long
|
||||||
new JodaTimeFormatterRegistrar().registerFormatters(formatterRegistry);
|
new JodaTimeFormatterRegistrar().registerFormatters(formatterRegistry);
|
||||||
|
|
|
@ -23,7 +23,6 @@ import java.util.UUID;
|
||||||
|
|
||||||
import org.springframework.core.convert.ConversionService;
|
import org.springframework.core.convert.ConversionService;
|
||||||
import org.springframework.core.convert.converter.ConverterRegistry;
|
import org.springframework.core.convert.converter.ConverterRegistry;
|
||||||
import org.springframework.util.ClassUtils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A specialization of {@link GenericConversionService} configured by default with
|
* A specialization of {@link GenericConversionService} configured by default with
|
||||||
|
@ -40,11 +39,6 @@ import org.springframework.util.ClassUtils;
|
||||||
*/
|
*/
|
||||||
public class DefaultConversionService extends GenericConversionService {
|
public class DefaultConversionService extends GenericConversionService {
|
||||||
|
|
||||||
/** Java 8's java.time package available? */
|
|
||||||
private static final boolean jsr310Available =
|
|
||||||
ClassUtils.isPresent("java.time.ZoneId", DefaultConversionService.class.getClassLoader());
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new {@code DefaultConversionService} with the set of
|
* Create a new {@code DefaultConversionService} with the set of
|
||||||
* {@linkplain DefaultConversionService#addDefaultConverters(ConverterRegistry) default converters}.
|
* {@linkplain DefaultConversionService#addDefaultConverters(ConverterRegistry) default converters}.
|
||||||
|
@ -67,9 +61,9 @@ public class DefaultConversionService extends GenericConversionService {
|
||||||
addCollectionConverters(converterRegistry);
|
addCollectionConverters(converterRegistry);
|
||||||
|
|
||||||
converterRegistry.addConverter(new ByteBufferConverter((ConversionService) converterRegistry));
|
converterRegistry.addConverter(new ByteBufferConverter((ConversionService) converterRegistry));
|
||||||
if (jsr310Available) {
|
converterRegistry.addConverter(new StringToTimeZoneConverter());
|
||||||
Jsr310ConverterRegistrar.registerJsr310Converters(converterRegistry);
|
converterRegistry.addConverter(new ZoneIdToTimeZoneConverter());
|
||||||
}
|
converterRegistry.addConverter(new ZonedDateTimeToCalendarConverter());
|
||||||
|
|
||||||
converterRegistry.addConverter(new ObjectToObjectConverter());
|
converterRegistry.addConverter(new ObjectToObjectConverter());
|
||||||
converterRegistry.addConverter(new IdToEntityConverter((ConversionService) converterRegistry));
|
converterRegistry.addConverter(new IdToEntityConverter((ConversionService) converterRegistry));
|
||||||
|
@ -149,17 +143,4 @@ public class DefaultConversionService extends GenericConversionService {
|
||||||
converterRegistry.addConverter(UUID.class, String.class, new ObjectToStringConverter());
|
converterRegistry.addConverter(UUID.class, String.class, new ObjectToStringConverter());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Inner class to avoid a hard-coded dependency on Java 8's {@code java.time} package.
|
|
||||||
*/
|
|
||||||
private static final class Jsr310ConverterRegistrar {
|
|
||||||
|
|
||||||
public static void registerJsr310Converters(ConverterRegistry converterRegistry) {
|
|
||||||
converterRegistry.addConverter(new StringToTimeZoneConverter());
|
|
||||||
converterRegistry.addConverter(new ZoneIdToTimeZoneConverter());
|
|
||||||
converterRegistry.addConverter(new ZonedDateTimeToCalendarConverter());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -753,8 +753,6 @@ public class Jackson2ObjectMapperBuilder {
|
||||||
// jackson-datatype-jdk8 not available
|
// jackson-datatype-jdk8 not available
|
||||||
}
|
}
|
||||||
|
|
||||||
// Java 8 java.time package present?
|
|
||||||
if (ClassUtils.isPresent("java.time.LocalDate", this.moduleClassLoader)) {
|
|
||||||
try {
|
try {
|
||||||
Class<? extends Module> javaTimeModule = (Class<? extends Module>)
|
Class<? extends Module> javaTimeModule = (Class<? extends Module>)
|
||||||
ClassUtils.forName("com.fasterxml.jackson.datatype.jsr310.JavaTimeModule", this.moduleClassLoader);
|
ClassUtils.forName("com.fasterxml.jackson.datatype.jsr310.JavaTimeModule", this.moduleClassLoader);
|
||||||
|
@ -763,7 +761,6 @@ public class Jackson2ObjectMapperBuilder {
|
||||||
catch (ClassNotFoundException ex) {
|
catch (ClassNotFoundException ex) {
|
||||||
// jackson-datatype-jsr310 not available
|
// jackson-datatype-jsr310 not available
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Joda-Time present?
|
// Joda-Time present?
|
||||||
if (ClassUtils.isPresent("org.joda.time.LocalDate", this.moduleClassLoader)) {
|
if (ClassUtils.isPresent("org.joda.time.LocalDate", this.moduleClassLoader)) {
|
||||||
|
|
|
@ -70,7 +70,7 @@ public class ServletRequestMethodArgumentResolver implements HandlerMethodArgume
|
||||||
Principal.class.isAssignableFrom(paramType) ||
|
Principal.class.isAssignableFrom(paramType) ||
|
||||||
Locale.class == paramType ||
|
Locale.class == paramType ||
|
||||||
TimeZone.class == paramType ||
|
TimeZone.class == paramType ||
|
||||||
"java.time.ZoneId".equals(paramType.getName()) ||
|
ZoneId.class == paramType ||
|
||||||
InputStream.class.isAssignableFrom(paramType) ||
|
InputStream.class.isAssignableFrom(paramType) ||
|
||||||
Reader.class.isAssignableFrom(paramType) ||
|
Reader.class.isAssignableFrom(paramType) ||
|
||||||
HttpMethod.class == paramType);
|
HttpMethod.class == paramType);
|
||||||
|
@ -110,8 +110,9 @@ public class ServletRequestMethodArgumentResolver implements HandlerMethodArgume
|
||||||
TimeZone timeZone = RequestContextUtils.getTimeZone(request);
|
TimeZone timeZone = RequestContextUtils.getTimeZone(request);
|
||||||
return (timeZone != null ? timeZone : TimeZone.getDefault());
|
return (timeZone != null ? timeZone : TimeZone.getDefault());
|
||||||
}
|
}
|
||||||
else if ("java.time.ZoneId".equals(paramType.getName())) {
|
else if (ZoneId.class == paramType) {
|
||||||
return ZoneIdResolver.resolveZoneId(request);
|
TimeZone timeZone = RequestContextUtils.getTimeZone(request);
|
||||||
|
return (timeZone != null ? timeZone.toZoneId() : ZoneId.systemDefault());
|
||||||
}
|
}
|
||||||
else if (InputStream.class.isAssignableFrom(paramType)) {
|
else if (InputStream.class.isAssignableFrom(paramType)) {
|
||||||
return request.getInputStream();
|
return request.getInputStream();
|
||||||
|
@ -126,16 +127,4 @@ public class ServletRequestMethodArgumentResolver implements HandlerMethodArgume
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Inner class to avoid a hard-coded dependency on Java 8's {@link java.time.ZoneId}.
|
|
||||||
*/
|
|
||||||
private static class ZoneIdResolver {
|
|
||||||
|
|
||||||
public static Object resolveZoneId(HttpServletRequest request) {
|
|
||||||
TimeZone timeZone = RequestContextUtils.getTimeZone(request);
|
|
||||||
return (timeZone != null ? timeZone.toZoneId() : ZoneId.systemDefault());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue