87 Commits

Author SHA1 Message Date
Mark Paluch
f5ae4c6498 Extend license header copyright years to 2025.
See #2446
2025-01-08 09:58:48 +01:00
Mark Paluch
d294109733 Switch to manual mocking instead of using Mockito annotation.
Closes #2409
2024-08-08 16:00:29 +02:00
Mark Paluch
ae851d878f Extend license header copyright years to 2024.
See #2349
2024-01-02 14:42:06 +01:00
Oliver Drotbohm
0e62f5ddff Adapt to changes in Spring Data Commons' SortHandlerMethodArgumentResolver.
Fixes GH-2339.
Related ticket: spring-projects/spring-data-commons#2531.
2023-12-13 17:44:44 +01:00
Mark Paluch
aa7262b038 Delombok code.
Closes #2286
2023-07-07 14:51:03 +02:00
Oliver Drotbohm
9020e1d10d Upgrade optional Jackson/JPA integration to Hibernate 6.
Fixes #2234.
2023-05-03 23:01:57 +02:00
Oliver Drotbohm
e4bca534bf Support to receive aggregate references as request parameters.
We now support using AggregateReference as type to bind request parameters taking URIs pointing to related aggregates. The default resolution will try to resolve the entire URI via UriToEntityConverter but one can also provide a function that can extract any part of the URI to be then resolved into either an identifier, aggregate instance or jMolecules Association against the ConversionService.

Fixes #2239.
2023-03-19 23:56:39 +01:00
Oliver Drotbohm
6d0034f15f Support for query methods returning a Slice.
Built on the the just introduced RepresentationModelAssembler implementations based on Slice in Spring HATEOAS and Spring Data Commons we now support returning a SlicedModel from the controller backing search resources ultimately triggering repository query methods.

The introduction triggered the refactoring to introduce RepresentationModelAssemblers (RMA) to remove the need for controllers inheriting from AbstractRepositoryController to access RepresentationModel assembly functionality. RMA acts as a facade for both Paged-/SlicedResourceAssembler as well as PersistentEntityResourceAssembler.

Fixes #2235.
2023-03-02 17:20:09 +01:00
Oliver Drotbohm
d02d1bb0c1 Support for returning response bodies on deletion of item resources.
RepositoryRestConfiguration now allows to configure to return a response body for the deletion of item resources. The controller implementation follows the same patter we have already established for creation and updates: unless explicitly enabled or disabled we now consider the presence of an accept header as indicator of whether a response body should be rendered.

This could be a "breaking" change for clients having explicitly expected 204 until now even for requests with an Accept header. If that's an issue, those should either explicitly disable the setting, do not submit an Accept header or loosen their expectations to expect either 200 or 2xx as indicator of success in general.

Fixes #2225.
2023-02-21 17:25:28 +01:00
Oliver Drotbohm
b77f6cead7 Additional test cases for default CORS setup on repositories.
We now also assert on the Access-Control-Allow-Origin to default to * in case no more detailed configuration was set up.

Issue #2208.
2023-01-09 16:41:48 +01:00
Oliver Drotbohm
1bfa83cb73 Register per-repository pattern for observability purposes.
The standard Spring MVC observability integration registers the plain request pattern for observations. For our repository controllers that would result in one pattern registered for all individual repository resources (e.g. /{repository}/{id} etc.). However, the insights users would like to gain rather follows the individual repositories exposed. That's why we have so far exposed repository specific path pattern (/myrepo/{id}) via a custom request attribute. To adhere to the new observability integration of Spring Framework 6, we need to expose that particular pattern on the ServerRequestObservationContext, too.

Fixes #2212.
2023-01-09 15:31:57 +01:00
Mark Paluch
f0e86b9a17 Extend license header copyright years to 2023.
See #2211
2023-01-02 09:53:37 +01:00
Oliver Drotbohm
07ebc501cd Polishing.
Added test case and re-enabled the base URI to be prepended even in case a controller path prefix is configured. That functionality had been lost with the originally submitted changes.

Related ticket: #2157
Original pull request: #2088.
2022-07-06 17:26:07 +02:00
Yves Galante
8daacadb1e Add support for controller base path on BasePathAwareController / RepositoryRestController.
This commit introduces support for a common base path shared amongst all handler methods of a controller annotated with @BasePathAwareController / @RepositoryRestController.

Related ticket: #2157
Original pull request: #2088.
2022-07-06 17:26:07 +02:00
John Blum
29b7305d71 Remove punctuation in Exception messages.
Closes #2152.
2022-06-08 16:08:03 -07:00
Mark Paluch
218bedff06 Adopt tests to PagingAndSortingRepository split.
Closes #2105
2022-02-11 11:49:41 +01:00
Oliver Drotbohm
b7d6b2b78c Update copyright years to 2022. 2022-02-07 10:26:46 +01:00
Jens Schauder
ee317f1b91 Remove Eclipse Non-Javadoc comments.
Closes #2093
2022-01-05 13:40:05 +01:00
Oliver Drotbohm
ede294967f Upgrade to Spring Framework 6. 2021-11-30 18:56:53 +01:00
Oliver Drotbohm
1828a6a2a7 Switch to JUnit 5.
Issue #2075.
2021-10-12 22:29:45 +02:00
Oliver Drotbohm
94dec6bfef Adapt to removed deprecations in Spring HATEOAS 1.4.
Fixes #2072.
2021-10-08 11:02:55 +02:00
Oliver Drotbohm
c0125c99a8 Qualify references to ResourceType.COLLECTION to avoid ambiguities to AssertJ in tests.
Fixes #2071.
2021-10-06 12:35:09 +02:00
Oliver Drotbohm
46dc6e03fc Prevent duplicate controller registrations through class-level @RequestMapping.
When we detected @BasePathAwareController and @RepositoryRestController instances, we now reject types that use @RequestMapping on the class level as doing so causes an inevitable registration of the controller with Spring MVC.

Fixes #1342, #1628, #1686, #1946.
2021-10-06 12:13:37 +02:00
Oliver Drotbohm
1dae476040 Adapt Content-Type header for HAL FORMS requests based on affordances.
Whenever HAL FORMS is supposed to be rendered, we now adapt the `Content-Type` header depending on whether affordances (and thus `_templates`) are present. If none can be found, we either adapt the header to either `application/hal+json` or even `application/json` depending on the `Accept` header arrangement given. If none match, we reject the request with `406 Not Acceptable`.

Had to reintroduce a dependency on Lombok to use @SneakyThrows as otherwise we cannot throw HttpMediaTypeNotAcceptableException from a ResponseBodyAdvice. A manual implementation of the pattern does not compile on Java 8 (at least on MacOS).

Fixes #2060.
2021-09-14 22:49:05 +02:00
Oliver Drotbohm
161a3a9499 Allow customization of LinkCollector.
LinkCollector is now an interface. The actual implementation has been moved to DefaultLinkCollector. RepositoryRestConfigurer now has a customizeLinkCollector(…) callback method to tweak or even completely replace the LinkCollector instance.

Fixes #2042.
2021-07-15 08:15:20 +02:00
Oliver Drotbohm
a8c39eb9f8 Adapt test cases to adhere to RFC URI template expansion. 2021-07-14 17:33:47 +02:00
Oliver Drotbohm
21ed68262f Properly handle associations in nested entities.
Nested entities that contain a reference to an aggregate root get a link to that attached to their representation. Previously, the creation of those links assumed that the reference is a materialized instance of the remote aggregate. That's now altered to be able to deal with associations, use identifiers directly or materialize to an intermediate aggregate instance to potentially use a custom lookup.
2021-04-07 20:07:53 +02:00
Oliver Drotbohm
17538c65d7 Enable rendering as HAL FORMS.
We're now registering an HttpMessageConverter to render requests for HAL FORMS using the HalFormsConfiguration present in the application.

We're currently not adding any affordances yet. The change solely enables user code to add affordances explicitly, e.g. via RepresentationModelProcessor implementations.

Fixes: #1991.
2021-03-25 18:01:54 +01:00
Oliver Drotbohm
e9bc98a1e9 #1980 - RepositoryEntityLinks now overrides ….linkForItemResource(…). 2021-02-24 17:57:46 +01:00
Mark Paluch
7afe7f1a9c Update copyright year to 2021.
Closes #1952
2021-01-12 11:45:16 +01:00
Oliver Drotbohm
38f2bc4598 DATAREST-1581 - Fixed CORS defaults to include all HTTP methods exposed by Spring Data REST.
The fix for DATAREST-1535 has changed the default allowed methods for CORS requests to a smaller set than we originally returned. This commit reinstantiates the default to be set to all HTTP methods, Spring Data repositories support by default.

Related tickets: DATAREST-1535.
2020-12-01 22:35:25 +01:00
Oliver Drotbohm
328ea26244 DATAREST-1542 - Remove dependency to Spring WebMVC from core module.
Finally remove the dependency to Spring WebMVC from Spring Data REST's core module. Removed previously deprecated methods and update test configuration applying customizations.

Related tickets: DATAREST-1543.
2020-11-30 13:55:52 +01:00
Oliver Drotbohm
f00451dc7e DATAREST-1213 - Polishing.
Simplified tests and domain code. Reinstantiated accidentally removed method in PersistentEntityResource.

Original pull request: #355.
2020-10-26 22:36:01 +01:00
Dario Seidl
055c4528e8 DATAREST-1213 - ETag creation now uses proxy target for projections.
Original pull request: #355.
2020-10-26 22:36:01 +01:00
Oliver Drotbohm
25cfb6ecb9 DATAREST-1567 - Polishing.
Tweaked test setups to work without the explicit component scanning.

Original pull request: #382.
2020-09-25 10:57:15 +02:00
Oliver Drotbohm
9f62237dd3 DATAREST-1543 - Deprecate RepositoryRestConfiguration.getCorsRegistry().
Slightly tweaked the configuration model to rather handle the CorsRegistry via RepositoryRestConfigurer.configureRepositoryRestConfiguration(…) rather than RepositoryRestConfiguration itself. That allows moving of Spring WebMVC as a dependency in the core module.

The original methods exposing access to the CorsRegistry are now still available in deprecated form to not break existing clients.

Follow-up ticket: DATAREST-1542.
2020-07-03 15:06:41 +02:00
Oliver Drotbohm
a9576991fe DATAREST-1535 - Adapt to changes in Spring Framework 5.3.
We now implement getPatternParser() in DelegatingHandlerMapping introduced in Spring 5.3. Adapt to changes in CORS handling.
2020-06-24 23:52:45 +02:00
Oliver Drotbohm
4c17d54e9a DATAREST-1499, DATAREST-1500 - Cleanups.
Moved off Spring Framework deprecations for HttpMessageNotReadableException. This required some rearrangements of method signatures for types (hopefully) exclusively used by internal abstractions (some public, but not very friendly for user extension in the first place).

Switched to consistent use of Pageable.unpaged() instead of null. Switched to the use of new factory methods in Spring HATEOAS. Some Java 8 based improvements in request handling to simplify the implementation code. Deprecation of code that got obsolete due to the use of the factory methods.

Moved off some deprecations in Jackson APIs.

Removed a couple of unused imports. General avoidance of common warnings. Suppression where needed. Removed dead code in configuration.
2020-03-27 14:16:47 +01:00
Oliver Drotbohm
d8c3394cd7 DATAREST-1470 - Switched to use factory methods of RepresentationModel types. 2020-01-14 14:51:18 +01:00
Mark Paluch
88f49da22f DATAREST-1467 - Update copyright years to 2020. 2020-01-07 09:02:59 +01:00
Greg Turnquist
b016c0b125 DATAREST-1356 - Polishing. 2019-10-21 13:03:04 -05:00
Ľubomír Varga
202a8aa302 DATAREST-1356 - Fix updating single associations.
Correct a regression regarding association links. Introduce several test cases to prove this situation is fixed regarding PUTs for association links.

Source of the bug: 554d6cb27b (diff-1d7c16fe1992fef13a47fa8ab8599718L317) flips the criteria from "not single" to "single" without checking for related impacts.
2019-10-21 13:02:45 -05:00
Greg Turnquist
9c56c3f217 DATAREST-1421 - Deprecate ALPS_JSON and ALPS_JSON_VALUE.
Instead, use Spring HATEAOS's MediaTypes.ALPS_JSON and ALPS_JSON_VALUE.
2019-08-08 10:54:45 -05:00
Oliver Drotbohm
244c57f712 DATAREST-1414 - Use I18N facilities of Spring HATEOAS more intensively.
We now rely on the MessageResolver capabilities of Spring HATEOAS to benefit of the optimizations in resource bundle resolution. Tweaked a couple of tests to make sure they properly use the resolver resorting to the default message the MessageResourceResolvable exposes.
2019-07-31 18:19:00 +02:00
Mark Paluch
19c261d7d0 DATAREST-1410 - Migrate remaining tests to AssertJ. 2019-07-31 10:06:03 +02:00
Mark Paluch
5eba301d62 DATAREST-1397 - Adapt to CORS changes in AbstractHandlerMapping.
We now enable CORS handling for all requests by overriding the newly introduced hasCorsConfigurationSource method. We cannot detect CORS configuration handling solely on the handler but require path headers to resolve repository interface mappings.
2019-06-21 15:40:07 +02:00
Mark Paluch
49605b2b1a DATAREST-1351 - URL Cleanup. 2019-06-05 11:30:39 +02:00
Oliver Drotbohm
82b928848b DATAREST-1373 - Upgrade to API changes in Spring HATEOAS 1.0 M2. 2019-05-08 19:49:58 +02:00
Spring Operator
3a0cba94a2 DATAREST-1351 - URL Cleanup.
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# Fixed URLs

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://www.apache.org/licenses/ with 1 occurrences migrated to:
  https://www.apache.org/licenses/ ([https](https://www.apache.org/licenses/) result 200).
* [ ] http://www.apache.org/licenses/LICENSE-2.0 with 395 occurrences migrated to:
  https://www.apache.org/licenses/LICENSE-2.0 ([https](https://www.apache.org/licenses/LICENSE-2.0) result 200).
* [ ] http://www.apache.org/licenses/LICENSE-2.0.html with 1 occurrences migrated to:
  https://www.apache.org/licenses/LICENSE-2.0.html ([https](https://www.apache.org/licenses/LICENSE-2.0.html) result 200).

Original Pull Request: #352
2019-03-22 10:51:57 +01:00
Oliver Drotbohm
d714d10675 DATAREST-1341 - Upgrade to latest API changes in Spring HATEOAS. 2019-03-04 11:42:58 +01:00