Migrate code to Java 17 style.
Use var instead of explicit local types where applicable. Use pattern variable instead instanceof and cast. Prefer loops and nullable types over Stream and Optional. Convert classes to records where applicable. See #2465
This commit is contained in:
committed by
Jens Schauder
parent
d4036ec0a9
commit
c735b58607
@@ -24,12 +24,10 @@ import java.util.List;
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.hateoas.TemplateVariable;
|
||||
import org.springframework.hateoas.TemplateVariable.VariableType;
|
||||
import org.springframework.hateoas.TemplateVariables;
|
||||
import org.springframework.hateoas.server.mvc.UriComponentsContributor;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.web.util.UriComponents;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
@@ -77,24 +75,24 @@ public class HateoasPageableHandlerMethodArgumentResolver extends PageableHandle
|
||||
*/
|
||||
public TemplateVariables getPaginationTemplateVariables(MethodParameter parameter, UriComponents template) {
|
||||
|
||||
String pagePropertyName = getParameterNameToUse(getPageParameterName(), parameter);
|
||||
String sizePropertyName = getParameterNameToUse(getSizeParameterName(), parameter);
|
||||
var pagePropertyName = getParameterNameToUse(getPageParameterName(), parameter);
|
||||
var sizePropertyName = getParameterNameToUse(getSizeParameterName(), parameter);
|
||||
|
||||
List<TemplateVariable> names = new ArrayList<>();
|
||||
MultiValueMap<String, String> queryParameters = template.getQueryParams();
|
||||
boolean append = !queryParameters.isEmpty();
|
||||
var queryParameters = template.getQueryParams();
|
||||
var append = !queryParameters.isEmpty();
|
||||
|
||||
for (String propertyName : Arrays.asList(pagePropertyName, sizePropertyName)) {
|
||||
for (var propertyName : Arrays.asList(pagePropertyName, sizePropertyName)) {
|
||||
|
||||
if (!queryParameters.containsKey(propertyName)) {
|
||||
|
||||
VariableType type = append ? REQUEST_PARAM_CONTINUED : REQUEST_PARAM;
|
||||
String description = String.format("pagination.%s.description", propertyName);
|
||||
var type = append ? REQUEST_PARAM_CONTINUED : REQUEST_PARAM;
|
||||
var description = String.format("pagination.%s.description", propertyName);
|
||||
names.add(new TemplateVariable(propertyName, type, description));
|
||||
}
|
||||
}
|
||||
|
||||
TemplateVariables pagingVariables = new TemplateVariables(names);
|
||||
var pagingVariables = new TemplateVariables(names);
|
||||
return pagingVariables.concat(sortResolver.getSortTemplateVariables(parameter, template));
|
||||
}
|
||||
|
||||
@@ -107,20 +105,18 @@ public class HateoasPageableHandlerMethodArgumentResolver extends PageableHandle
|
||||
|
||||
Assert.notNull(builder, "UriComponentsBuilder must not be null!");
|
||||
|
||||
if (!(value instanceof Pageable)) {
|
||||
if (!(value instanceof Pageable pageable)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Pageable pageable = (Pageable) value;
|
||||
|
||||
if (pageable.isUnpaged()) {
|
||||
return;
|
||||
}
|
||||
|
||||
String pagePropertyName = getParameterNameToUse(getPageParameterName(), parameter);
|
||||
String sizePropertyName = getParameterNameToUse(getSizeParameterName(), parameter);
|
||||
var pagePropertyName = getParameterNameToUse(getPageParameterName(), parameter);
|
||||
var sizePropertyName = getParameterNameToUse(getSizeParameterName(), parameter);
|
||||
|
||||
int pageNumber = pageable.getPageNumber();
|
||||
var pageNumber = pageable.getPageNumber();
|
||||
|
||||
builder.replaceQueryParam(pagePropertyName, isOneIndexedParameters() ? pageNumber + 1 : pageNumber);
|
||||
builder.replaceQueryParam(sizePropertyName,
|
||||
|
||||
@@ -20,11 +20,9 @@ import static org.springframework.hateoas.TemplateVariable.VariableType.*;
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.hateoas.TemplateVariable;
|
||||
import org.springframework.hateoas.TemplateVariable.VariableType;
|
||||
import org.springframework.hateoas.TemplateVariables;
|
||||
import org.springframework.hateoas.server.mvc.UriComponentsContributor;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.web.util.UriComponents;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
@@ -49,16 +47,16 @@ public class HateoasSortHandlerMethodArgumentResolver extends SortHandlerMethodA
|
||||
*/
|
||||
public TemplateVariables getSortTemplateVariables(MethodParameter parameter, UriComponents template) {
|
||||
|
||||
String sortParameter = getSortParameter(parameter);
|
||||
MultiValueMap<String, String> queryParameters = template.getQueryParams();
|
||||
boolean append = !queryParameters.isEmpty();
|
||||
var sortParameter = getSortParameter(parameter);
|
||||
var queryParameters = template.getQueryParams();
|
||||
var append = !queryParameters.isEmpty();
|
||||
|
||||
if (queryParameters.containsKey(sortParameter)) {
|
||||
return TemplateVariables.NONE;
|
||||
}
|
||||
|
||||
String description = String.format("pagination.%s.description", sortParameter);
|
||||
VariableType type = append ? REQUEST_PARAM_CONTINUED : REQUEST_PARAM;
|
||||
var description = String.format("pagination.%s.description", sortParameter);
|
||||
var type = append ? REQUEST_PARAM_CONTINUED : REQUEST_PARAM;
|
||||
return new TemplateVariables(new TemplateVariable(sortParameter, type, description));
|
||||
}
|
||||
|
||||
@@ -69,16 +67,15 @@ public class HateoasSortHandlerMethodArgumentResolver extends SortHandlerMethodA
|
||||
@Override
|
||||
public void enhance(UriComponentsBuilder builder, @Nullable MethodParameter parameter, @Nullable Object value) {
|
||||
|
||||
if (!(value instanceof Sort)) {
|
||||
if (!(value instanceof Sort sort)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Sort sort = (Sort) value;
|
||||
String sortParameter = getSortParameter(parameter);
|
||||
var sortParameter = getSortParameter(parameter);
|
||||
|
||||
builder.replaceQueryParam(sortParameter);
|
||||
|
||||
for (String expression : foldIntoExpressions(sort)) {
|
||||
for (var expression : foldIntoExpressions(sort)) {
|
||||
builder.queryParam(sortParameter, expression);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ import org.springframework.core.annotation.AnnotationUtils;
|
||||
import org.springframework.data.projection.Accessor;
|
||||
import org.springframework.data.projection.MethodInterceptorFactory;
|
||||
import org.springframework.data.util.ClassTypeInformation;
|
||||
import org.springframework.data.util.TypeInformation;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
@@ -87,7 +86,7 @@ public class JsonProjectingMethodInterceptorFactory implements MethodInterceptor
|
||||
Assert.notNull(jsonProvider, "JsonProvider must not be null!");
|
||||
Assert.notNull(mappingProvider, "MappingProvider must not be null!");
|
||||
|
||||
Configuration configuration = Configuration.builder()//
|
||||
var configuration = Configuration.builder()//
|
||||
.options(Option.ALWAYS_RETURN_LIST) //
|
||||
.jsonProvider(jsonProvider) //
|
||||
.mappingProvider(mappingProvider) //
|
||||
@@ -103,7 +102,7 @@ public class JsonProjectingMethodInterceptorFactory implements MethodInterceptor
|
||||
@Override
|
||||
public MethodInterceptor createMethodInterceptor(Object source, Class<?> targetType) {
|
||||
|
||||
DocumentContext context = InputStream.class.isInstance(source) ? this.context.parse((InputStream) source)
|
||||
var context = InputStream.class.isInstance(source) ? this.context.parse((InputStream) source)
|
||||
: this.context.parse(source);
|
||||
|
||||
return new InputMessageProjecting(context);
|
||||
@@ -132,7 +131,7 @@ public class JsonProjectingMethodInterceptorFactory implements MethodInterceptor
|
||||
*/
|
||||
private static boolean hasJsonPathAnnotation(Class<?> type) {
|
||||
|
||||
for (Method method : type.getMethods()) {
|
||||
for (var method : type.getMethods()) {
|
||||
if (AnnotationUtils.findAnnotation(method, org.springframework.data.web.JsonPath.class) != null) {
|
||||
return true;
|
||||
}
|
||||
@@ -157,32 +156,32 @@ public class JsonProjectingMethodInterceptorFactory implements MethodInterceptor
|
||||
@Override
|
||||
public Object invoke(MethodInvocation invocation) throws Throwable {
|
||||
|
||||
Method method = invocation.getMethod();
|
||||
TypeInformation<Object> returnType = ClassTypeInformation.fromReturnTypeOf(method);
|
||||
ResolvableType type = ResolvableType.forMethodReturnType(method);
|
||||
boolean isCollectionResult = Collection.class.isAssignableFrom(type.getRawClass());
|
||||
var method = invocation.getMethod();
|
||||
var returnType = ClassTypeInformation.fromReturnTypeOf(method);
|
||||
var type = ResolvableType.forMethodReturnType(method);
|
||||
var isCollectionResult = Collection.class.isAssignableFrom(type.getRawClass());
|
||||
type = isCollectionResult ? type : ResolvableType.forClassWithGenerics(List.class, type);
|
||||
|
||||
Iterable<String> jsonPaths = getJsonPaths(method);
|
||||
|
||||
for (String jsonPath : jsonPaths) {
|
||||
for (var jsonPath : jsonPaths) {
|
||||
|
||||
try {
|
||||
|
||||
if (returnType.getRequiredActualType().getType().isInterface()) {
|
||||
|
||||
List<?> result = context.read(jsonPath);
|
||||
Object nested = result.isEmpty() ? null : result.get(0);
|
||||
var nested = result.isEmpty() ? null : result.get(0);
|
||||
|
||||
return isCollectionResult && !(nested instanceof Collection) ? result : nested;
|
||||
}
|
||||
|
||||
boolean definitePath = JsonPath.isPathDefinite(jsonPath);
|
||||
var definitePath = JsonPath.isPathDefinite(jsonPath);
|
||||
type = isCollectionResult && definitePath
|
||||
? ResolvableType.forClassWithGenerics(List.class, type)
|
||||
: type;
|
||||
|
||||
List<?> result = (List<?>) context.read(jsonPath, new ResolvableTypeRef(type));
|
||||
var result = (List<?>) context.read(jsonPath, new ResolvableTypeRef(type));
|
||||
|
||||
if (isCollectionResult && definitePath) {
|
||||
result = (List<?>) result.get(0);
|
||||
@@ -206,7 +205,7 @@ public class JsonProjectingMethodInterceptorFactory implements MethodInterceptor
|
||||
*/
|
||||
private static Collection<String> getJsonPaths(Method method) {
|
||||
|
||||
org.springframework.data.web.JsonPath annotation = AnnotationUtils.findAnnotation(method,
|
||||
var annotation = AnnotationUtils.findAnnotation(method,
|
||||
org.springframework.data.web.JsonPath.class);
|
||||
|
||||
if (annotation != null) {
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package org.springframework.data.web;
|
||||
|
||||
import java.beans.PropertyDescriptor;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -33,10 +32,8 @@ import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.core.convert.TypeDescriptor;
|
||||
import org.springframework.data.mapping.PropertyPath;
|
||||
import org.springframework.data.mapping.PropertyReferenceException;
|
||||
import org.springframework.data.util.TypeInformation;
|
||||
import org.springframework.expression.AccessException;
|
||||
import org.springframework.expression.EvaluationContext;
|
||||
import org.springframework.expression.Expression;
|
||||
import org.springframework.expression.TypedValue;
|
||||
import org.springframework.expression.spel.SpelEvaluationException;
|
||||
import org.springframework.expression.spel.SpelParserConfiguration;
|
||||
@@ -81,7 +78,7 @@ class MapDataBinder extends WebDataBinder {
|
||||
@SuppressWarnings("unchecked")
|
||||
public Map<String, Object> getTarget() {
|
||||
|
||||
Object target = super.getTarget();
|
||||
var target = super.getTarget();
|
||||
|
||||
if (target == null) {
|
||||
throw new IllegalStateException("Target bean should never be null!");
|
||||
@@ -176,15 +173,15 @@ class MapDataBinder extends WebDataBinder {
|
||||
throw new NotWritablePropertyException(type, propertyName);
|
||||
}
|
||||
|
||||
PropertyPath leafProperty = getPropertyPath(propertyName).getLeafProperty();
|
||||
TypeInformation<?> owningType = leafProperty.getOwningType();
|
||||
TypeInformation<?> propertyType = leafProperty.getTypeInformation();
|
||||
var leafProperty = getPropertyPath(propertyName).getLeafProperty();
|
||||
var owningType = leafProperty.getOwningType();
|
||||
var propertyType = leafProperty.getTypeInformation();
|
||||
|
||||
propertyType = propertyName.endsWith("]") ? propertyType.getActualType() : propertyType;
|
||||
|
||||
if (propertyType != null && conversionRequired(value, propertyType.getType())) {
|
||||
|
||||
PropertyDescriptor descriptor = BeanUtils.getPropertyDescriptor(owningType.getType(),
|
||||
var descriptor = BeanUtils.getPropertyDescriptor(owningType.getType(),
|
||||
leafProperty.getSegment());
|
||||
|
||||
if (descriptor == null) {
|
||||
@@ -192,8 +189,8 @@ class MapDataBinder extends WebDataBinder {
|
||||
leafProperty.getSegment(), owningType.getType()));
|
||||
}
|
||||
|
||||
MethodParameter methodParameter = new MethodParameter(descriptor.getReadMethod(), -1);
|
||||
TypeDescriptor typeDescriptor = TypeDescriptor.nested(methodParameter, 0);
|
||||
var methodParameter = new MethodParameter(descriptor.getReadMethod(), -1);
|
||||
var typeDescriptor = TypeDescriptor.nested(methodParameter, 0);
|
||||
|
||||
if (typeDescriptor == null) {
|
||||
throw new IllegalStateException(
|
||||
@@ -209,7 +206,7 @@ class MapDataBinder extends WebDataBinder {
|
||||
.withRootObject(map) //
|
||||
.build();
|
||||
|
||||
Expression expression = PARSER.parseExpression(propertyName);
|
||||
var expression = PARSER.parseExpression(propertyName);
|
||||
|
||||
try {
|
||||
expression.setValue(context, value);
|
||||
@@ -229,7 +226,7 @@ class MapDataBinder extends WebDataBinder {
|
||||
|
||||
private PropertyPath getPropertyPath(String propertyName) {
|
||||
|
||||
String plainPropertyPath = propertyName.replaceAll("\\[.*?\\]", "");
|
||||
var plainPropertyPath = propertyName.replaceAll("\\[.*?\\]", "");
|
||||
return PropertyPath.from(plainPropertyPath, type);
|
||||
}
|
||||
|
||||
@@ -281,13 +278,13 @@ class MapDataBinder extends WebDataBinder {
|
||||
return TypedValue.NULL;
|
||||
}
|
||||
|
||||
PropertyPath path = PropertyPath.from(name, type);
|
||||
var path = PropertyPath.from(name, type);
|
||||
|
||||
try {
|
||||
return super.read(context, target, name);
|
||||
} catch (AccessException o_O) {
|
||||
|
||||
Object emptyResult = path.isCollection() ? CollectionFactory.createCollection(List.class, 0)
|
||||
var emptyResult = path.isCollection() ? CollectionFactory.createCollection(List.class, 0)
|
||||
: CollectionFactory.createMap(Map.class, 0);
|
||||
|
||||
((Map<String, Object>) target).put(name, emptyResult);
|
||||
@@ -307,9 +304,9 @@ class MapDataBinder extends WebDataBinder {
|
||||
*/
|
||||
private TypeDescriptor getDescriptor(PropertyPath path, Object emptyValue) {
|
||||
|
||||
Class<?> actualPropertyType = path.getType();
|
||||
var actualPropertyType = path.getType();
|
||||
|
||||
TypeDescriptor valueDescriptor = conversionService.canConvert(String.class, actualPropertyType)
|
||||
var valueDescriptor = conversionService.canConvert(String.class, actualPropertyType)
|
||||
? TypeDescriptor.valueOf(String.class)
|
||||
: TypeDescriptor.valueOf(HashMap.class);
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@ package org.springframework.data.web;
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.web.bind.support.WebDataBinderFactory;
|
||||
import org.springframework.web.context.request.NativeWebRequest;
|
||||
@@ -84,11 +83,11 @@ public class PageableHandlerMethodArgumentResolver extends PageableHandlerMethod
|
||||
public Pageable resolveArgument(MethodParameter methodParameter, @Nullable ModelAndViewContainer mavContainer,
|
||||
NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) {
|
||||
|
||||
String page = webRequest.getParameter(getParameterNameToUse(getPageParameterName(), methodParameter));
|
||||
String pageSize = webRequest.getParameter(getParameterNameToUse(getSizeParameterName(), methodParameter));
|
||||
var page = webRequest.getParameter(getParameterNameToUse(getPageParameterName(), methodParameter));
|
||||
var pageSize = webRequest.getParameter(getParameterNameToUse(getSizeParameterName(), methodParameter));
|
||||
|
||||
Sort sort = sortResolver.resolveArgument(methodParameter, mavContainer, webRequest, binderFactory);
|
||||
Pageable pageable = getPageable(methodParameter, page, pageSize);
|
||||
var sort = sortResolver.resolveArgument(methodParameter, mavContainer, webRequest, binderFactory);
|
||||
var pageable = getPageable(methodParameter, page, pageSize);
|
||||
|
||||
if (sort.isSorted()) {
|
||||
return PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), sort);
|
||||
|
||||
@@ -17,13 +17,10 @@ package org.springframework.data.web;
|
||||
|
||||
import static org.springframework.data.web.SpringDataAnnotationUtils.*;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.core.annotation.MergedAnnotation;
|
||||
import org.springframework.core.annotation.MergedAnnotations;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
@@ -197,10 +194,10 @@ public abstract class PageableHandlerMethodArgumentResolverSupport {
|
||||
@Nullable String pageSizeString) {
|
||||
assertPageableUniqueness(methodParameter);
|
||||
|
||||
Optional<Pageable> defaultOrFallback = getDefaultFromAnnotationOrFallback(methodParameter).toOptional();
|
||||
var defaultOrFallback = getDefaultFromAnnotationOrFallback(methodParameter).toOptional();
|
||||
|
||||
Optional<Integer> page = parseAndApplyBoundaries(pageString, Integer.MAX_VALUE, true);
|
||||
Optional<Integer> pageSize = parseAndApplyBoundaries(pageSizeString, maxPageSize, false);
|
||||
var page = parseAndApplyBoundaries(pageString, Integer.MAX_VALUE, true);
|
||||
var pageSize = parseAndApplyBoundaries(pageSizeString, maxPageSize, false);
|
||||
|
||||
if (!(page.isPresent() && pageSize.isPresent()) && !defaultOrFallback.isPresent()) {
|
||||
return Pageable.unpaged();
|
||||
@@ -229,9 +226,9 @@ public abstract class PageableHandlerMethodArgumentResolverSupport {
|
||||
*/
|
||||
protected String getParameterNameToUse(String source, @Nullable MethodParameter parameter) {
|
||||
|
||||
StringBuilder builder = new StringBuilder(prefix);
|
||||
var builder = new StringBuilder(prefix);
|
||||
|
||||
String value = SpringDataAnnotationUtils.getQualifier(parameter);
|
||||
var value = SpringDataAnnotationUtils.getQualifier(parameter);
|
||||
|
||||
if (StringUtils.hasLength(value)) {
|
||||
builder.append(value);
|
||||
@@ -243,7 +240,7 @@ public abstract class PageableHandlerMethodArgumentResolverSupport {
|
||||
|
||||
private Pageable getDefaultFromAnnotationOrFallback(MethodParameter methodParameter) {
|
||||
|
||||
PageableDefault defaults = methodParameter.getParameterAnnotation(PageableDefault.class);
|
||||
var defaults = methodParameter.getParameterAnnotation(PageableDefault.class);
|
||||
|
||||
if (defaults != null) {
|
||||
return getDefaultPageRequestFrom(methodParameter, defaults);
|
||||
@@ -258,7 +255,7 @@ public abstract class PageableHandlerMethodArgumentResolverSupport {
|
||||
Integer defaultPageSize = getSpecificPropertyOrDefaultFromValue(defaults, "size");
|
||||
|
||||
if (defaultPageSize < 1) {
|
||||
Method annotatedMethod = parameter.getMethod();
|
||||
var annotatedMethod = parameter.getMethod();
|
||||
throw new IllegalStateException(String.format(INVALID_DEFAULT_PAGE_SIZE, annotatedMethod));
|
||||
}
|
||||
|
||||
@@ -285,7 +282,7 @@ public abstract class PageableHandlerMethodArgumentResolverSupport {
|
||||
}
|
||||
|
||||
try {
|
||||
int parsed = Integer.parseInt(parameter) - (oneIndexedParameters && shiftIndex ? 1 : 0);
|
||||
var parsed = Integer.parseInt(parameter) - (oneIndexedParameters && shiftIndex ? 1 : 0);
|
||||
return Optional.of(parsed < 0 ? 0 : parsed > upper ? upper : parsed);
|
||||
} catch (NumberFormatException e) {
|
||||
return Optional.of(0);
|
||||
|
||||
@@ -41,7 +41,6 @@ import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
|
||||
import org.springframework.web.util.UriComponents;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
/**
|
||||
* {@link RepresentationModelAssembler} to easily convert {@link Page} instances into {@link PagedModel}.
|
||||
@@ -172,10 +171,10 @@ public class PagedResourcesAssembler<T> implements RepresentationModelAssembler<
|
||||
Assert.notNull(type, "Type must not be null!");
|
||||
Assert.notNull(link, "Link must not be null!");
|
||||
|
||||
PageMetadata metadata = asPageMetadata(page);
|
||||
var metadata = asPageMetadata(page);
|
||||
|
||||
EmbeddedWrapper wrapper = wrappers.emptyCollectionOf(type);
|
||||
List<EmbeddedWrapper> embedded = Collections.singletonList(wrapper);
|
||||
var wrapper = wrappers.emptyCollectionOf(type);
|
||||
var embedded = Collections.singletonList(wrapper);
|
||||
|
||||
return addPaginationLinks(PagedModel.of(embedded, metadata), page, link);
|
||||
}
|
||||
@@ -206,20 +205,20 @@ public class PagedResourcesAssembler<T> implements RepresentationModelAssembler<
|
||||
|
||||
List<R> resources = new ArrayList<>(page.getNumberOfElements());
|
||||
|
||||
for (S element : page) {
|
||||
for (var element : page) {
|
||||
resources.add(assembler.toModel(element));
|
||||
}
|
||||
|
||||
PagedModel<R> resource = createPagedModel(resources, asPageMetadata(page), page);
|
||||
var resource = createPagedModel(resources, asPageMetadata(page), page);
|
||||
|
||||
return addPaginationLinks(resource, page, link);
|
||||
}
|
||||
|
||||
private <R> PagedModel<R> addPaginationLinks(PagedModel<R> resources, Page<?> page, Optional<Link> link) {
|
||||
|
||||
UriTemplate base = getUriTemplate(link);
|
||||
var base = getUriTemplate(link);
|
||||
|
||||
boolean isNavigable = page.hasPrevious() || page.hasNext();
|
||||
var isNavigable = page.hasPrevious() || page.hasNext();
|
||||
|
||||
if (isNavigable || forceFirstAndLastRels) {
|
||||
resources.add(createLink(base, PageRequest.of(0, page.getSize(), page.getSort()), IanaLinkRelations.FIRST));
|
||||
@@ -229,7 +228,7 @@ public class PagedResourcesAssembler<T> implements RepresentationModelAssembler<
|
||||
resources.add(createLink(base, page.previousPageable(), IanaLinkRelations.PREV));
|
||||
}
|
||||
|
||||
Link selfLink = link.map(Link::withSelfRel)//
|
||||
var selfLink = link.map(Link::withSelfRel)//
|
||||
.orElseGet(() -> createLink(base, page.getPageable(), IanaLinkRelations.SELF));
|
||||
|
||||
resources.add(selfLink);
|
||||
@@ -240,7 +239,7 @@ public class PagedResourcesAssembler<T> implements RepresentationModelAssembler<
|
||||
|
||||
if (isNavigable || forceFirstAndLastRels) {
|
||||
|
||||
int lastIndex = page.getTotalPages() == 0 ? 0 : page.getTotalPages() - 1;
|
||||
var lastIndex = page.getTotalPages() == 0 ? 0 : page.getTotalPages() - 1;
|
||||
|
||||
resources
|
||||
.add(createLink(base, PageRequest.of(lastIndex, page.getSize(), page.getSort()), IanaLinkRelations.LAST));
|
||||
@@ -270,7 +269,7 @@ public class PagedResourcesAssembler<T> implements RepresentationModelAssembler<
|
||||
*/
|
||||
private Link createLink(UriTemplate base, Pageable pageable, LinkRelation relation) {
|
||||
|
||||
UriComponentsBuilder builder = fromUri(base.expand());
|
||||
var builder = fromUri(base.expand());
|
||||
pageableResolver.enhance(builder, getMethodParameter(), pageable);
|
||||
|
||||
return Link.of(UriTemplate.of(builder.build().toString()), relation);
|
||||
@@ -298,7 +297,7 @@ public class PagedResourcesAssembler<T> implements RepresentationModelAssembler<
|
||||
|
||||
Assert.notNull(page, "Page must not be null!");
|
||||
|
||||
int number = pageableResolver.isOneIndexedParameters() ? page.getNumber() + 1 : page.getNumber();
|
||||
var number = pageableResolver.isOneIndexedParameters() ? page.getNumber() + 1 : page.getNumber();
|
||||
|
||||
return new PageMetadata(page.getSize(), number, page.getTotalElements(), page.getTotalPages());
|
||||
}
|
||||
|
||||
@@ -15,9 +15,6 @@
|
||||
*/
|
||||
package org.springframework.data.web;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
@@ -79,7 +76,7 @@ public class PagedResourcesAssemblerArgumentResolver implements HandlerMethodArg
|
||||
public Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,
|
||||
NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) {
|
||||
|
||||
MethodParameter pageableParameter = findMatchingPageableParameter(parameter);
|
||||
var pageableParameter = findMatchingPageableParameter(parameter);
|
||||
|
||||
if (pageableParameter != null) {
|
||||
return new MethodParameterAwarePagedResourcesAssembler<>(pageableParameter, resolver, null);
|
||||
@@ -98,15 +95,15 @@ public class PagedResourcesAssemblerArgumentResolver implements HandlerMethodArg
|
||||
@Nullable
|
||||
private static MethodParameter findMatchingPageableParameter(MethodParameter parameter) {
|
||||
|
||||
Method method = parameter.getMethod();
|
||||
var method = parameter.getMethod();
|
||||
|
||||
if (method == null) {
|
||||
throw new IllegalArgumentException(String.format("Could not obtain method from parameter %s!", parameter));
|
||||
}
|
||||
|
||||
MethodParameters parameters = MethodParameters.of(method);
|
||||
List<MethodParameter> pageableParameters = parameters.getParametersOfType(Pageable.class);
|
||||
Qualifier assemblerQualifier = parameter.getParameterAnnotation(Qualifier.class);
|
||||
var parameters = MethodParameters.of(method);
|
||||
var pageableParameters = parameters.getParametersOfType(Pageable.class);
|
||||
var assemblerQualifier = parameter.getParameterAnnotation(Qualifier.class);
|
||||
|
||||
if (pageableParameters.isEmpty()) {
|
||||
return null;
|
||||
@@ -114,8 +111,8 @@ public class PagedResourcesAssemblerArgumentResolver implements HandlerMethodArg
|
||||
|
||||
if (pageableParameters.size() == 1) {
|
||||
|
||||
MethodParameter pageableParameter = pageableParameters.get(0);
|
||||
MethodParameter matchingParameter = returnIfQualifiersMatch(pageableParameter, assemblerQualifier);
|
||||
var pageableParameter = pageableParameters.get(0);
|
||||
var matchingParameter = returnIfQualifiersMatch(pageableParameter, assemblerQualifier);
|
||||
|
||||
if (matchingParameter == null) {
|
||||
logger.info(LogMessage.format(SUPERFLOUS_QUALIFIER, PagedResourcesAssembler.class.getSimpleName(),
|
||||
@@ -129,9 +126,9 @@ public class PagedResourcesAssemblerArgumentResolver implements HandlerMethodArg
|
||||
throw new IllegalStateException(PARAMETER_AMBIGUITY);
|
||||
}
|
||||
|
||||
for (MethodParameter pageableParameter : pageableParameters) {
|
||||
for (var pageableParameter : pageableParameters) {
|
||||
|
||||
MethodParameter matchingParameter = returnIfQualifiersMatch(pageableParameter, assemblerQualifier);
|
||||
var matchingParameter = returnIfQualifiersMatch(pageableParameter, assemblerQualifier);
|
||||
|
||||
if (matchingParameter != null) {
|
||||
return matchingParameter;
|
||||
@@ -149,7 +146,7 @@ public class PagedResourcesAssemblerArgumentResolver implements HandlerMethodArg
|
||||
return pageableParameter;
|
||||
}
|
||||
|
||||
Qualifier pageableParameterQualifier = pageableParameter.getParameterAnnotation(Qualifier.class);
|
||||
var pageableParameterQualifier = pageableParameter.getParameterAnnotation(Qualifier.class);
|
||||
|
||||
if (pageableParameterQualifier == null) {
|
||||
return null;
|
||||
|
||||
@@ -84,7 +84,7 @@ public class ProjectingJackson2HttpMessageConverter extends MappingJackson2HttpM
|
||||
|
||||
Assert.notNull(mapper, "ObjectMapper must not be null!");
|
||||
|
||||
SpelAwareProxyProjectionFactory projectionFactory = new SpelAwareProxyProjectionFactory();
|
||||
var projectionFactory = new SpelAwareProxyProjectionFactory();
|
||||
projectionFactory.registerMethodInvokerFactory(new JsonProjectingMethodInterceptorFactory(
|
||||
new JacksonJsonProvider(mapper), new JacksonMappingProvider(mapper)));
|
||||
|
||||
@@ -120,9 +120,9 @@ public class ProjectingJackson2HttpMessageConverter extends MappingJackson2HttpM
|
||||
return false;
|
||||
}
|
||||
|
||||
ResolvableType owner = contextClass == null ? null : ResolvableType.forClass(contextClass);
|
||||
Class<?> rawType = ResolvableType.forType(type, owner).resolve(Object.class);
|
||||
Boolean result = supportedTypesCache.get(rawType);
|
||||
var owner = contextClass == null ? null : ResolvableType.forClass(contextClass);
|
||||
var rawType = ResolvableType.forType(type, owner).resolve(Object.class);
|
||||
var result = supportedTypesCache.get(rawType);
|
||||
|
||||
if (result != null) {
|
||||
return result;
|
||||
|
||||
@@ -92,7 +92,7 @@ public class ProxyingHandlerMethodArgumentResolver extends ModelAttributeMethodP
|
||||
return false;
|
||||
}
|
||||
|
||||
Class<?> type = parameter.getParameterType();
|
||||
var type = parameter.getParameterType();
|
||||
|
||||
if (!type.isInterface()) {
|
||||
return false;
|
||||
@@ -109,7 +109,7 @@ public class ProxyingHandlerMethodArgumentResolver extends ModelAttributeMethodP
|
||||
}
|
||||
|
||||
// Fallback for only user defined interfaces
|
||||
String packageName = ClassUtils.getPackageName(type);
|
||||
var packageName = ClassUtils.getPackageName(type);
|
||||
|
||||
return !IGNORED_PACKAGES.stream().anyMatch(it -> packageName.startsWith(it));
|
||||
}
|
||||
@@ -122,7 +122,7 @@ public class ProxyingHandlerMethodArgumentResolver extends ModelAttributeMethodP
|
||||
protected Object createAttribute(String attributeName, MethodParameter parameter, WebDataBinderFactory binderFactory,
|
||||
NativeWebRequest request) throws Exception {
|
||||
|
||||
MapDataBinder binder = new MapDataBinder(parameter.getParameterType(), conversionService.getObject());
|
||||
var binder = new MapDataBinder(parameter.getParameterType(), conversionService.getObject());
|
||||
binder.bind(new MutablePropertyValues(request.getParameterMap()));
|
||||
|
||||
return proxyFactory.createProjection(parameter.getParameterType(), binder.getTarget());
|
||||
|
||||
@@ -18,10 +18,8 @@ package org.springframework.data.web;
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.lang.NonNull;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.web.reactive.BindingContext;
|
||||
import org.springframework.web.reactive.result.method.SyncHandlerMethodArgumentResolver;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
@@ -78,13 +76,13 @@ public class ReactivePageableHandlerMethodArgumentResolver extends PageableHandl
|
||||
public Pageable resolveArgumentValue(MethodParameter parameter, BindingContext bindingContext,
|
||||
ServerWebExchange exchange) {
|
||||
|
||||
MultiValueMap<String, String> queryParams = exchange.getRequest().getQueryParams();
|
||||
String page = queryParams.getFirst(getParameterNameToUse(getPageParameterName(), parameter));
|
||||
String pageSize = queryParams.getFirst(getParameterNameToUse(getSizeParameterName(), parameter));
|
||||
var queryParams = exchange.getRequest().getQueryParams();
|
||||
var page = queryParams.getFirst(getParameterNameToUse(getPageParameterName(), parameter));
|
||||
var pageSize = queryParams.getFirst(getParameterNameToUse(getSizeParameterName(), parameter));
|
||||
|
||||
Sort sort = sortResolver.resolveArgumentValue(parameter, bindingContext, exchange);
|
||||
var sort = sortResolver.resolveArgumentValue(parameter, bindingContext, exchange);
|
||||
|
||||
Pageable pageable = getPageable(parameter, page, pageSize);
|
||||
var pageable = getPageable(parameter, page, pageSize);
|
||||
|
||||
return sort.isSorted() ? PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), sort) : pageable;
|
||||
}
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
*/
|
||||
package org.springframework.data.web;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.lang.NonNull;
|
||||
@@ -54,7 +52,7 @@ public class ReactiveSortHandlerMethodArgumentResolver extends SortHandlerMethod
|
||||
public Sort resolveArgumentValue(MethodParameter parameter, BindingContext bindingContext,
|
||||
ServerWebExchange exchange) {
|
||||
|
||||
List<String> directionParameter = exchange.getRequest().getQueryParams().get(getSortParameter(parameter));
|
||||
var directionParameter = exchange.getRequest().getQueryParams().get(getSortParameter(parameter));
|
||||
|
||||
// No parameter
|
||||
if (directionParameter == null) {
|
||||
|
||||
@@ -57,7 +57,7 @@ public class SortHandlerMethodArgumentResolver extends SortHandlerMethodArgument
|
||||
public Sort resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,
|
||||
NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) {
|
||||
|
||||
String[] directionParameter = webRequest.getParameterValues(getSortParameter(parameter));
|
||||
var directionParameter = webRequest.getParameterValues(getSortParameter(parameter));
|
||||
|
||||
// No parameter
|
||||
if (directionParameter == null) {
|
||||
|
||||
@@ -22,10 +22,7 @@ import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.core.annotation.MergedAnnotation;
|
||||
import org.springframework.core.annotation.MergedAnnotations;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.domain.Sort.Direction;
|
||||
import org.springframework.data.domain.Sort.Order;
|
||||
@@ -123,8 +120,8 @@ public abstract class SortHandlerMethodArgumentResolverSupport {
|
||||
*/
|
||||
protected Sort getDefaultFromAnnotationOrFallback(MethodParameter parameter) {
|
||||
|
||||
SortDefaults annotatedDefaults = parameter.getParameterAnnotation(SortDefaults.class);
|
||||
SortDefault annotatedDefault = parameter.getParameterAnnotation(SortDefault.class);
|
||||
var annotatedDefaults = parameter.getParameterAnnotation(SortDefaults.class);
|
||||
var annotatedDefault = parameter.getParameterAnnotation(SortDefault.class);
|
||||
|
||||
if (annotatedDefault != null && annotatedDefaults != null) {
|
||||
throw new IllegalArgumentException(
|
||||
@@ -138,9 +135,9 @@ public abstract class SortHandlerMethodArgumentResolverSupport {
|
||||
|
||||
if (annotatedDefaults != null) {
|
||||
|
||||
Sort sort = Sort.unsorted();
|
||||
var sort = Sort.unsorted();
|
||||
|
||||
for (SortDefault currentAnnotatedDefault : annotatedDefaults.value()) {
|
||||
for (var currentAnnotatedDefault : annotatedDefaults.value()) {
|
||||
sort = appendOrCreateSortTo(currentAnnotatedDefault, sort);
|
||||
}
|
||||
|
||||
@@ -167,9 +164,9 @@ public abstract class SortHandlerMethodArgumentResolverSupport {
|
||||
}
|
||||
|
||||
List<Order> orders = new ArrayList<>(fields.length);
|
||||
for (String field : fields) {
|
||||
for (var field : fields) {
|
||||
|
||||
Order order = new Order(sortDefault.direction(), field);
|
||||
var order = new Order(sortDefault.direction(), field);
|
||||
orders.add(sortDefault.caseSensitive() ? order : order.ignoreCase());
|
||||
}
|
||||
|
||||
@@ -184,9 +181,9 @@ public abstract class SortHandlerMethodArgumentResolverSupport {
|
||||
*/
|
||||
protected String getSortParameter(@Nullable MethodParameter parameter) {
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
var builder = new StringBuilder();
|
||||
|
||||
String value = SpringDataAnnotationUtils.getQualifier(parameter);
|
||||
var value = SpringDataAnnotationUtils.getQualifier(parameter);
|
||||
|
||||
if (StringUtils.hasLength(value)) {
|
||||
builder.append(value);
|
||||
@@ -211,7 +208,7 @@ public abstract class SortHandlerMethodArgumentResolverSupport {
|
||||
|
||||
List<Order> allOrders = new ArrayList<>();
|
||||
|
||||
for (String part : source) {
|
||||
for (var part : source) {
|
||||
|
||||
if (part == null) {
|
||||
continue;
|
||||
@@ -238,9 +235,9 @@ public abstract class SortHandlerMethodArgumentResolverSupport {
|
||||
List<String> expressions = new ArrayList<>();
|
||||
ExpressionBuilder builder = null;
|
||||
|
||||
for (Order order : sort) {
|
||||
for (var order : sort) {
|
||||
|
||||
Direction direction = order.getDirection();
|
||||
var direction = order.getDirection();
|
||||
|
||||
if (builder == null) {
|
||||
builder = new ExpressionBuilder(direction);
|
||||
@@ -268,9 +265,9 @@ public abstract class SortHandlerMethodArgumentResolverSupport {
|
||||
List<String> expressions = new ArrayList<>();
|
||||
ExpressionBuilder builder = null;
|
||||
|
||||
for (Order order : sort) {
|
||||
for (var order : sort) {
|
||||
|
||||
Direction direction = order.getDirection();
|
||||
var direction = order.getDirection();
|
||||
|
||||
if (builder == null) {
|
||||
builder = new ExpressionBuilder(direction);
|
||||
@@ -391,7 +388,7 @@ public abstract class SortHandlerMethodArgumentResolverSupport {
|
||||
*/
|
||||
public static SortOrderParser parse(String part, String delimiter) {
|
||||
|
||||
String[] elements = Arrays.stream(part.split(delimiter)) //
|
||||
var elements = Arrays.stream(part.split(delimiter)) //
|
||||
.filter(SortHandlerMethodArgumentResolver::notOnlyDots) //
|
||||
.toArray(String[]::new);
|
||||
|
||||
@@ -430,7 +427,7 @@ public abstract class SortHandlerMethodArgumentResolverSupport {
|
||||
*/
|
||||
public void forEachOrder(Consumer<? super Order> callback) {
|
||||
|
||||
for (int i = 0; i < lastIndex; i++) {
|
||||
for (var i = 0; i < lastIndex; i++) {
|
||||
toOrder(elements[i]).ifPresent(callback);
|
||||
}
|
||||
}
|
||||
@@ -445,7 +442,7 @@ public abstract class SortHandlerMethodArgumentResolverSupport {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
Order order = direction.map(it -> new Order(it, property)).orElseGet(() -> Order.by(property));
|
||||
var order = direction.map(it -> new Order(it, property)).orElseGet(() -> Order.by(property));
|
||||
|
||||
if (ignoreCase.isPresent()) {
|
||||
return Optional.of(order.ignoreCase());
|
||||
|
||||
@@ -23,7 +23,6 @@ import java.util.Set;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.core.annotation.AnnotationUtils;
|
||||
import org.springframework.core.annotation.MergedAnnotation;
|
||||
import org.springframework.core.annotation.MergedAnnotations;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.lang.Nullable;
|
||||
@@ -47,14 +46,14 @@ abstract class SpringDataAnnotationUtils {
|
||||
*/
|
||||
public static void assertPageableUniqueness(MethodParameter parameter) {
|
||||
|
||||
Method method = parameter.getMethod();
|
||||
var method = parameter.getMethod();
|
||||
|
||||
if (method == null) {
|
||||
throw new IllegalArgumentException(String.format("Method parameter %s is not backed by a method.", parameter));
|
||||
}
|
||||
|
||||
if (containsMoreThanOnePageableParameter(method)) {
|
||||
Annotation[][] annotations = method.getParameterAnnotations();
|
||||
var annotations = method.getParameterAnnotations();
|
||||
assertQualifiersFor(method.getParameterTypes(), annotations);
|
||||
}
|
||||
}
|
||||
@@ -67,9 +66,9 @@ abstract class SpringDataAnnotationUtils {
|
||||
*/
|
||||
private static boolean containsMoreThanOnePageableParameter(Method method) {
|
||||
|
||||
boolean pageableFound = false;
|
||||
var pageableFound = false;
|
||||
|
||||
for (Class<?> type : method.getParameterTypes()) {
|
||||
for (var type : method.getParameterTypes()) {
|
||||
|
||||
if (pageableFound && type.equals(Pageable.class)) {
|
||||
return true;
|
||||
@@ -94,10 +93,10 @@ abstract class SpringDataAnnotationUtils {
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> T getSpecificPropertyOrDefaultFromValue(Annotation annotation, String property) {
|
||||
|
||||
Object propertyDefaultValue = AnnotationUtils.getDefaultValue(annotation, property);
|
||||
Object propertyValue = AnnotationUtils.getValue(annotation, property);
|
||||
var propertyDefaultValue = AnnotationUtils.getDefaultValue(annotation, property);
|
||||
var propertyValue = AnnotationUtils.getValue(annotation, property);
|
||||
|
||||
Object result = ObjectUtils.nullSafeEquals(propertyDefaultValue, propertyValue) //
|
||||
var result = ObjectUtils.nullSafeEquals(propertyDefaultValue, propertyValue) //
|
||||
? AnnotationUtils.getValue(annotation) //
|
||||
: propertyValue;
|
||||
|
||||
@@ -122,8 +121,8 @@ abstract class SpringDataAnnotationUtils {
|
||||
return null;
|
||||
}
|
||||
|
||||
MergedAnnotations annotations = MergedAnnotations.from(parameter.getParameter());
|
||||
MergedAnnotation<Qualifier> qualifier = annotations.get(Qualifier.class);
|
||||
var annotations = MergedAnnotations.from(parameter.getParameter());
|
||||
var qualifier = annotations.get(Qualifier.class);
|
||||
|
||||
return qualifier.isPresent() ? qualifier.getString("value") : null;
|
||||
}
|
||||
@@ -139,11 +138,11 @@ abstract class SpringDataAnnotationUtils {
|
||||
|
||||
Set<String> values = new HashSet<>();
|
||||
|
||||
for (int i = 0; i < annotations.length; i++) {
|
||||
for (var i = 0; i < annotations.length; i++) {
|
||||
|
||||
if (Pageable.class.equals(parameterTypes[i])) {
|
||||
|
||||
Qualifier qualifier = findAnnotation(annotations[i]);
|
||||
var qualifier = findAnnotation(annotations[i]);
|
||||
|
||||
if (null == qualifier) {
|
||||
throw new IllegalStateException(
|
||||
@@ -169,7 +168,7 @@ abstract class SpringDataAnnotationUtils {
|
||||
@Nullable
|
||||
private static Qualifier findAnnotation(Annotation[] annotations) {
|
||||
|
||||
for (Annotation annotation : annotations) {
|
||||
for (var annotation : annotations) {
|
||||
if (annotation instanceof Qualifier) {
|
||||
return (Qualifier) annotation;
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ public class XmlBeamHttpMessageConverter extends AbstractHttpMessageConverter<Ob
|
||||
@Override
|
||||
public DocumentBuilderFactory createDocumentBuilderFactory() {
|
||||
|
||||
DocumentBuilderFactory factory = super.createDocumentBuilderFactory();
|
||||
var factory = super.createDocumentBuilderFactory();
|
||||
|
||||
factory.setAttribute("http://apache.org/xml/features/disallow-doctype-decl", true);
|
||||
factory.setAttribute("http://xml.org/sax/features/external-general-entities", false);
|
||||
@@ -97,8 +97,8 @@ public class XmlBeamHttpMessageConverter extends AbstractHttpMessageConverter<Ob
|
||||
@Override
|
||||
protected boolean supports(Class<?> type) {
|
||||
|
||||
Class<?> rawType = ResolvableType.forType(type).resolve(Object.class);
|
||||
Boolean result = supportedTypesCache.get(rawType);
|
||||
var rawType = ResolvableType.forType(type).resolve(Object.class);
|
||||
var result = supportedTypesCache.get(rawType);
|
||||
|
||||
if (result != null) {
|
||||
return result;
|
||||
@@ -134,7 +134,7 @@ public class XmlBeamHttpMessageConverter extends AbstractHttpMessageConverter<Ob
|
||||
|
||||
} catch (RuntimeException o_O) {
|
||||
|
||||
Throwable cause = o_O.getCause();
|
||||
var cause = o_O.getCause();
|
||||
|
||||
if (SAXParseException.class.isInstance(cause)) {
|
||||
throw new HttpMessageNotReadableException("Cannot read input message!", cause, inputMessage);
|
||||
|
||||
@@ -73,7 +73,7 @@ public class HateoasAwareSpringDataWebConfiguration extends SpringDataWebConfigu
|
||||
@Bean
|
||||
public HateoasPageableHandlerMethodArgumentResolver pageableResolver() {
|
||||
|
||||
HateoasPageableHandlerMethodArgumentResolver pageableResolver = new HateoasPageableHandlerMethodArgumentResolver(
|
||||
var pageableResolver = new HateoasPageableHandlerMethodArgumentResolver(
|
||||
this.sortResolver.get());
|
||||
customizePageableResolver(pageableResolver);
|
||||
return pageableResolver;
|
||||
@@ -87,7 +87,7 @@ public class HateoasAwareSpringDataWebConfiguration extends SpringDataWebConfigu
|
||||
@Override
|
||||
public HateoasSortHandlerMethodArgumentResolver sortResolver() {
|
||||
|
||||
HateoasSortHandlerMethodArgumentResolver sortResolver = new HateoasSortHandlerMethodArgumentResolver();
|
||||
var sortResolver = new HateoasSortHandlerMethodArgumentResolver();
|
||||
customizeSortResolver(sortResolver);
|
||||
return sortResolver;
|
||||
}
|
||||
|
||||
@@ -122,8 +122,8 @@ public class ProjectingArgumentResolverRegistrar {
|
||||
return bean;
|
||||
}
|
||||
|
||||
RequestMappingHandlerAdapter adapter = (RequestMappingHandlerAdapter) bean;
|
||||
List<HandlerMethodArgumentResolver> currentResolvers = adapter.getArgumentResolvers();
|
||||
var adapter = (RequestMappingHandlerAdapter) bean;
|
||||
var currentResolvers = adapter.getArgumentResolvers();
|
||||
|
||||
if (currentResolvers == null) {
|
||||
throw new IllegalStateException(
|
||||
|
||||
@@ -101,7 +101,7 @@ public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLo
|
||||
@Bean
|
||||
public PageableHandlerMethodArgumentResolver pageableResolver() {
|
||||
|
||||
PageableHandlerMethodArgumentResolver pageableResolver = //
|
||||
var pageableResolver = //
|
||||
new PageableHandlerMethodArgumentResolver(sortResolver.get());
|
||||
customizePageableResolver(pageableResolver);
|
||||
return pageableResolver;
|
||||
@@ -114,7 +114,7 @@ public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLo
|
||||
@Bean
|
||||
public SortHandlerMethodArgumentResolver sortResolver() {
|
||||
|
||||
SortHandlerMethodArgumentResolver sortResolver = new SortHandlerMethodArgumentResolver();
|
||||
var sortResolver = new SortHandlerMethodArgumentResolver();
|
||||
customizeSortResolver(sortResolver);
|
||||
return sortResolver;
|
||||
}
|
||||
@@ -129,13 +129,11 @@ public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLo
|
||||
registry.addFormatter(DistanceFormatter.INSTANCE);
|
||||
registry.addFormatter(PointFormatter.INSTANCE);
|
||||
|
||||
if (!(registry instanceof FormattingConversionService)) {
|
||||
if (!(registry instanceof FormattingConversionService conversionService)) {
|
||||
return;
|
||||
}
|
||||
|
||||
FormattingConversionService conversionService = (FormattingConversionService) registry;
|
||||
|
||||
DomainClassConverter<FormattingConversionService> converter = new DomainClassConverter<>(conversionService);
|
||||
var converter = new DomainClassConverter<FormattingConversionService>(conversionService);
|
||||
converter.setApplicationContext(context);
|
||||
}
|
||||
|
||||
@@ -149,7 +147,7 @@ public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLo
|
||||
argumentResolvers.add(sortResolver.get());
|
||||
argumentResolvers.add(pageableResolver.get());
|
||||
|
||||
ProxyingHandlerMethodArgumentResolver resolver = new ProxyingHandlerMethodArgumentResolver(conversionService, true);
|
||||
var resolver = new ProxyingHandlerMethodArgumentResolver(conversionService, true);
|
||||
resolver.setBeanFactory(context);
|
||||
forwardBeanClassLoader(resolver);
|
||||
|
||||
@@ -166,9 +164,9 @@ public class SpringDataWebConfiguration implements WebMvcConfigurer, BeanClassLo
|
||||
if (ClassUtils.isPresent("com.jayway.jsonpath.DocumentContext", context.getClassLoader())
|
||||
&& ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", context.getClassLoader())) {
|
||||
|
||||
ObjectMapper mapper = context.getBeanProvider(ObjectMapper.class).getIfUnique(ObjectMapper::new);
|
||||
var mapper = context.getBeanProvider(ObjectMapper.class).getIfUnique(ObjectMapper::new);
|
||||
|
||||
ProjectingJackson2HttpMessageConverter converter = new ProjectingJackson2HttpMessageConverter(mapper);
|
||||
var converter = new ProjectingJackson2HttpMessageConverter(mapper);
|
||||
converter.setBeanFactory(context);
|
||||
forwardBeanClassLoader(converter);
|
||||
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
package org.springframework.data.web.querydsl;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.springframework.core.MethodParameter;
|
||||
@@ -32,8 +30,6 @@ import org.springframework.web.context.request.NativeWebRequest;
|
||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
||||
import org.springframework.web.method.support.ModelAndViewContainer;
|
||||
|
||||
import com.querydsl.core.types.Predicate;
|
||||
|
||||
/**
|
||||
* {@link HandlerMethodArgumentResolver} to allow injection of {@link com.querydsl.core.types.Predicate} into Spring MVC
|
||||
* controller methods.
|
||||
@@ -79,18 +75,18 @@ public class QuerydslPredicateArgumentResolver extends QuerydslPredicateArgument
|
||||
public Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,
|
||||
NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception {
|
||||
|
||||
MultiValueMap<String, String> queryParameters = getQueryParameters(webRequest);
|
||||
Predicate result = getPredicate(parameter, queryParameters);
|
||||
var queryParameters = getQueryParameters(webRequest);
|
||||
var result = getPredicate(parameter, queryParameters);
|
||||
|
||||
return potentiallyConvertMethodParameterValue(parameter, result);
|
||||
}
|
||||
|
||||
private static MultiValueMap<String, String> getQueryParameters(NativeWebRequest webRequest) {
|
||||
|
||||
Map<String, String[]> parameterMap = webRequest.getParameterMap();
|
||||
var parameterMap = webRequest.getParameterMap();
|
||||
MultiValueMap<String, String> queryParameters = new LinkedMultiValueMap<>(parameterMap.size());
|
||||
|
||||
for (Entry<String, String[]> entry : parameterMap.entrySet()) {
|
||||
for (var entry : parameterMap.entrySet()) {
|
||||
queryParameters.put(entry.getKey(), Arrays.asList(entry.getValue()));
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package org.springframework.data.web.querydsl;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.springframework.core.MethodParameter;
|
||||
@@ -24,7 +23,6 @@ import org.springframework.core.annotation.MergedAnnotation;
|
||||
import org.springframework.core.annotation.MergedAnnotations;
|
||||
import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.data.querydsl.binding.QuerydslBinderCustomizer;
|
||||
import org.springframework.data.querydsl.binding.QuerydslBindings;
|
||||
import org.springframework.data.querydsl.binding.QuerydslBindingsFactory;
|
||||
import org.springframework.data.querydsl.binding.QuerydslPredicate;
|
||||
import org.springframework.data.querydsl.binding.QuerydslPredicateBuilder;
|
||||
@@ -78,13 +76,13 @@ public abstract class QuerydslPredicateArgumentResolverSupport {
|
||||
*/
|
||||
public boolean supportsParameter(MethodParameter parameter) {
|
||||
|
||||
ResolvableType type = ResolvableType.forMethodParameter(parameter);
|
||||
var type = ResolvableType.forMethodParameter(parameter);
|
||||
|
||||
if (PREDICATE.isAssignableFrom(type) || OPTIONAL_OF_PREDICATE.isAssignableFrom(type)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
MergedAnnotations annotations = MergedAnnotations.from(parameter.getParameter());
|
||||
var annotations = MergedAnnotations.from(parameter.getParameter());
|
||||
|
||||
if (annotations.isPresent(QuerydslPredicate.class)) {
|
||||
throw new IllegalArgumentException(String.format("Parameter at position %s must be of type Predicate but was %s.",
|
||||
@@ -96,15 +94,15 @@ public abstract class QuerydslPredicateArgumentResolverSupport {
|
||||
|
||||
Predicate getPredicate(MethodParameter parameter, MultiValueMap<String, String> queryParameters) {
|
||||
|
||||
MergedAnnotations annotations = MergedAnnotations.from(parameter.getParameter());
|
||||
MergedAnnotation<QuerydslPredicate> predicateAnnotation = annotations.get(QuerydslPredicate.class);
|
||||
var annotations = MergedAnnotations.from(parameter.getParameter());
|
||||
var predicateAnnotation = annotations.get(QuerydslPredicate.class);
|
||||
|
||||
TypeInformation<?> domainType = extractTypeInfo(parameter, predicateAnnotation).getRequiredActualType();
|
||||
var domainType = extractTypeInfo(parameter, predicateAnnotation).getRequiredActualType();
|
||||
|
||||
Optional<Class<? extends QuerydslBinderCustomizer<?>>> bindingsAnnotation = predicateAnnotation.getValue("bindings") //
|
||||
.map(CastUtils::cast);
|
||||
|
||||
QuerydslBindings bindings = bindingsAnnotation //
|
||||
var bindings = bindingsAnnotation //
|
||||
.map(it -> bindingsFactory.createBindingsFor(domainType, it)) //
|
||||
.orElseGet(() -> bindingsFactory.createBindingsFor(domainType));
|
||||
|
||||
@@ -135,7 +133,7 @@ public abstract class QuerydslPredicateArgumentResolverSupport {
|
||||
protected static TypeInformation<?> extractTypeInfo(MethodParameter parameter,
|
||||
MergedAnnotation<QuerydslPredicate> predicateAnnotation) {
|
||||
|
||||
Optional<QuerydslPredicate> annotation = predicateAnnotation.synthesize(MergedAnnotation::isPresent);
|
||||
var annotation = predicateAnnotation.synthesize(MergedAnnotation::isPresent);
|
||||
|
||||
return annotation.filter(it -> !Object.class.equals(it.root()))//
|
||||
.<TypeInformation<?>> map(it -> ClassTypeInformation.from(it.root()))//
|
||||
@@ -144,7 +142,7 @@ public abstract class QuerydslPredicateArgumentResolverSupport {
|
||||
|
||||
private static TypeInformation<?> detectDomainType(MethodParameter parameter) {
|
||||
|
||||
Method method = parameter.getMethod();
|
||||
var method = parameter.getMethod();
|
||||
|
||||
if (method == null) {
|
||||
throw new IllegalArgumentException("Method parameter is not backed by a method!");
|
||||
@@ -159,7 +157,7 @@ public abstract class QuerydslPredicateArgumentResolverSupport {
|
||||
return source;
|
||||
}
|
||||
|
||||
TypeInformation<?> actualType = source.getActualType();
|
||||
var actualType = source.getActualType();
|
||||
|
||||
if (actualType == null) {
|
||||
throw new IllegalArgumentException(String.format("Could not determine domain type from %s!", source));
|
||||
|
||||
@@ -15,9 +15,6 @@
|
||||
*/
|
||||
package org.springframework.data.web.querydsl;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.data.querydsl.binding.QuerydslBindingsFactory;
|
||||
@@ -29,8 +26,6 @@ import org.springframework.web.reactive.result.method.HandlerMethodArgumentResol
|
||||
import org.springframework.web.reactive.result.method.SyncHandlerMethodArgumentResolver;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
|
||||
import com.querydsl.core.types.Predicate;
|
||||
|
||||
/**
|
||||
* {@link HandlerMethodArgumentResolver} to allow injection of {@link com.querydsl.core.types.Predicate} into Spring
|
||||
* WebFlux controller methods.
|
||||
@@ -56,8 +51,8 @@ public class ReactiveQuerydslPredicateArgumentResolver extends QuerydslPredicate
|
||||
public Object resolveArgumentValue(MethodParameter parameter, BindingContext bindingContext,
|
||||
ServerWebExchange exchange) {
|
||||
|
||||
MultiValueMap<String, String> queryParameters = getQueryParameters(exchange);
|
||||
Predicate result = getPredicate(parameter, queryParameters);
|
||||
var queryParameters = getQueryParameters(exchange);
|
||||
var result = getPredicate(parameter, queryParameters);
|
||||
|
||||
return potentiallyConvertMethodParameterValue(parameter, result);
|
||||
}
|
||||
@@ -65,10 +60,10 @@ public class ReactiveQuerydslPredicateArgumentResolver extends QuerydslPredicate
|
||||
|
||||
private static MultiValueMap<String, String> getQueryParameters(ServerWebExchange exchange) {
|
||||
|
||||
MultiValueMap<String, String> queryParams = exchange.getRequest().getQueryParams();
|
||||
var queryParams = exchange.getRequest().getQueryParams();
|
||||
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>(queryParams.size());
|
||||
|
||||
for (Entry<String, List<String>> entry : queryParams.entrySet()) {
|
||||
for (var entry : queryParams.entrySet()) {
|
||||
parameters.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user