From 01bf6caf1eba3f64ca8c985bcebb52405665004f Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Mon, 4 Jan 2021 11:33:46 +0100 Subject: [PATCH] 75404: [Issue 3062] Self links contain embed params --- .../java/org/dspace/app/rest/RestResourceController.java | 7 +++++-- .../org/dspace/app/rest/RestResourceControllerIT.java | 9 +++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/RestResourceController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/RestResourceController.java index 8570dd3fcb..ca04c21906 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/RestResourceController.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/RestResourceController.java @@ -1021,15 +1021,18 @@ public class RestResourceController implements InitializingBean { /** * Internal method to convert the parameters provided as a MultivalueMap as a string to use in the self-link. + * This function will exclude all "embed" parameters * @param parameters - * @return encoded uriString containing request parameters + * @return encoded uriString containing request parameters without embed parameter */ private String getEncodedParameterStringFromRequestParams( @RequestParam MultiValueMap parameters) { UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.newInstance(); for (String key : parameters.keySet()) { - uriComponentsBuilder.queryParam(key, parameters.get(key)); + if (!StringUtils.equals(key, "embed")) { + uriComponentsBuilder.queryParam(key, parameters.get(key)); + } } return uriComponentsBuilder.encode().build().toString(); } diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/RestResourceControllerIT.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/RestResourceControllerIT.java index 0b1ec02d4c..ff7f2e3eca 100644 --- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/RestResourceControllerIT.java +++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/RestResourceControllerIT.java @@ -91,6 +91,15 @@ public class RestResourceControllerIT extends AbstractControllerIntegrationTest endsWith("/api/core/metadatafields/search/byFieldName"))); } + @Test + public void selfLinkContainsRequestParametersAndEmbedsWhenProvided() throws Exception { + // When we call a search endpoint with additional parameters and an embed parameter + getClient().perform(get("/api/core/metadatafields/search/byFieldName?schema=dc&offset=0&embed=schema")) + // The self link should contain those same parameters + .andExpect(jsonPath("$._links.self.href", endsWith( + "/api/core/metadatafields/search/byFieldName?schema=dc&offset=0"))); + } + }