DATACMNS-583 - DomainClassConverter returns input if given types are the same.

DomainClassConverter now returns input when the source type is identical to the target type. Previously we erroneously tried to convert the sourceType to the idType of the targetType's backing repository. As a side effect we also avoid performing some unnecessary converter hops.

Original pull request: #101.
This commit is contained in:
Thomas Darimont
2014-10-28 15:57:34 +01:00
committed by Oliver Gierke
parent 257792c6df
commit c898f1ec7b
2 changed files with 25 additions and 2 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2008-2012 the original author or authors.
* Copyright 2008-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.
@@ -31,11 +31,12 @@ import org.springframework.util.StringUtils;
/**
* {@link org.springframework.core.convert.converter.Converter} to convert arbitrary input into domain classes managed
* by Spring Data {@link CrudRepository} s. The implementation uses a {@link ConversionService} in turn to convert the
* by Spring Data {@link CrudRepository}s. The implementation uses a {@link ConversionService} in turn to convert the
* source type into the domain class' id type which is then converted into a domain class object by using a
* {@link CrudRepository}.
*
* @author Oliver Gierke
* @author Thomas Darimont
*/
public class DomainClassConverter<T extends ConversionService & ConverterRegistry> implements
ConditionalGenericConverter, ApplicationContextAware {
@@ -65,6 +66,10 @@ public class DomainClassConverter<T extends ConversionService & ConverterRegistr
return null;
}
if (sourceType.equals(targetType)) {
return source;
}
Class<?> domainType = targetType.getType();
RepositoryInformation info = repositories.getRepositoryInformationFor(domainType);
@@ -83,6 +88,10 @@ public class DomainClassConverter<T extends ConversionService & ConverterRegistr
return false;
}
if (sourceType.equals(targetType)) {
return true;
}
return conversionService.canConvert(sourceType.getType(),
repositories.getRepositoryInformationFor(targetType.getType()).getIdType());
}