private SimpleDateFormat resolveFormat(ConversionContext context) { AnnotationMetadata annotationMetadata = context.getAnnotationMetadata(); Optional<String> format = annotationMetadata.getValue(Format.class, String.class); return format .map((pattern) -> new SimpleDateFormat(pattern, context.getLocale())) .orElse(new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", context.getLocale())); }
@SuppressWarnings("unchecked") @Override public <T> Optional<T> convert(Object object, Class<T> targetType, ConversionContext context) { if (object == null || targetType == null || context == null) { return Optional.empty(); } if (targetType == Object.class) { return Optional.of((T) object); } Class<?> sourceType = object.getClass(); targetType = ReflectionUtils.getWrapperType(targetType); if (targetType.isInstance(object) && !Iterable.class.isInstance(object) && !Map.class.isInstance(object)) { return Optional.of((T) object); } Optional<? extends Class<? extends Annotation>> formattingAnn = context.getAnnotationMetadata().getAnnotationTypeByStereotype(Format.class); Class<? extends Annotation> formattingAnnotation = formattingAnn.orElse(null); ConvertiblePair pair = new ConvertiblePair(sourceType, targetType, formattingAnnotation); TypeConverter typeConverter = converterCache.get(pair); if (typeConverter == null) { typeConverter = findTypeConverter(sourceType, targetType, formattingAnnotation); if (typeConverter == null) { return Optional.empty(); } else { converterCache.put(pair, typeConverter); } } return typeConverter.convert(object, targetType, context); }
private DateTimeFormatter resolveFormatter(ConversionContext context) { Optional<String> format = context.getAnnotationMetadata().getValue(Format.class, String.class); return format .map((pattern) -> DateTimeFormatter.ofPattern(pattern, context.getLocale())) .orElse(DateTimeFormatter.RFC_1123_DATE_TIME); } }