Commit Graph

572 Commits

Author SHA1 Message Date
Oliver Gierke
a10aa934b7 DATAREST-1176 - Repository method exposure can now be controlled via RepositoryRestConfiguration.
The default exposure of repository methods is now controlled via RepositoryRestConfiguration.setExposeRepositoryMethodsByDefault(…). That allows us to remove the additional API from RepositoryDetectionStrategy as the mere detection is an orthogonal topic.

Also added RepositoryRestConfiguration.disableDefaultExposure() to set the RepositoryDetectionStategy to ANNOTATED and disables default method exposure in one go. That can be exposed via a Spring Boot configuration property downstream.
2018-01-18 18:41:07 +01:00
Simon Allegraud
d4a3ba1195 DATAREST-1181 - Prevent NullPointerException during JsonLateObjectEvaluator.evaluate(…).
Original pull request: #287.
2018-01-18 13:49:53 +01:00
Oliver Gierke
7edfc75472 DATAREST-1174 - Enable constructor properties to make sure WrappedPropertiesUnitTests continue to work.
Removed Lombok constructor and accessor generation to avoid having to deal with the changed default in Lombok 1.16.20 not generating @ConstructorProperties by default anymore.
2018-01-10 12:51:29 +01:00
Mark Paluch
5d9dbf1823 DATAREST-1170 - Update copyright years to 2018. 2018-01-09 08:44:14 +01:00
Oliver Gierke
d3c5e339db DATAREST-1160 - Adapt tests to new CORS defaults in Spring Framework.
Spring Framework 5.0.2 changes the default for the Allow-Credentials header to false. We now adapted our test case to that and also drop the expectation to see the request URL in the Allow-Origin header as that is only returned if Allow-Credentials is true, which it now isn't by default.
2017-11-27 09:57:30 +01:00
Oliver Gierke
d48499ad8d DATAREST-1152 - Overhaul of patch expression handling.
Significantly refactored the way that patch path expressions are handled and evaluated. The new design is centered around SpelPath that is aware of the original path as well as the derived SpEL expression. That SpelPath then requires clients to bind it to a type so that the original path can be validated (and rejected if invalid) and provide API to read, set, copy and move values backed by the original path. Both SpelPath and TypedSpelPath instances are cached to avoid repeated creation.

PatchOperation implementations now provide more fluent factory methods, in some cases via intermediate builders. Removed a lot of obsolete code that created JsonNodes from a list of PatchOperations as we don't actually use that functionality anywhere. Removed obsolete generics where possible.
2017-10-25 17:34:46 +02:00
Simmo Saan
74e12a55b7 DATAREST-1148 - Fix eager toString() call on domain object in ResourceStatus.
Originl pull request: #282.
2017-10-12 23:12:34 +02:00
Oliver Gierke
33c551014d DATAREST-1006 - Polishing.
Added unit test on MappingProperties directly.

Original pull request: #258.
2017-10-04 11:37:02 +02:00
Mathias Düsterhöft
4207be4243 DATAREST-1006 - MappedProperties now skips all ignored properties.
Original pull request: #258.
2017-10-04 11:36:54 +02:00
Mark Paluch
127640dd14 DATAREST-1129 - Prepare next development iteration. 2017-10-02 11:37:22 +02:00
Mark Paluch
ac2cbfcbc5 DATAREST-1129 - Release version 3.0 GA (Kay). 2017-10-02 11:10:23 +02:00
Oliver Gierke
973f932a39 DATAREST-1137 - All patch operations now verify path expressions.
We now make sure that all patch operations now get the path they're supposed to be applied to verified before execution.
2017-09-27 09:47:18 +02:00
Oliver Gierke
d56a1068ea DATAREST-1132 - Fixed @BasePathAwareController annotation lookup from CGLib proxies.
We now inspect the user class of the given bean type in BasePathAwareHandlerMapping.isHandler(…). We can't use AnnotationUtils as @RepositoryRestController is also annotated with @BasePathAwareController but must not be handled by this mapping.
2017-09-25 11:54:05 +02:00
Oliver Gierke
c0a3fb5678 DATAREST-1136 - DelegatingHandlerMapping now exposes its delegates. 2017-09-25 09:34:33 +02:00
Mark Paluch
a315e054ba DATAREST-1135 - Added explicit automatic module name for JDK 9. 2017-09-21 14:11:02 +02:00
Oliver Gierke
8e16a9553f DATAREST-1112 - Prepare next development iteration. 2017-09-11 17:40:19 +02:00
Oliver Gierke
c3dc9ebfaf DATAREST-1112 - Release version 3.0 RC3 (Kay). 2017-09-11 17:24:45 +02:00
Oliver Gierke
8f269e28fe DATAREST-1127 - Patch operations now always verify paths before operation application.
Previously the SpEL expresssion created from JSON Patch path expressions were executed without double checking whether these paths actually exist on the target object in the first place. This is now in place.
2017-09-08 12:20:44 +02:00
Oliver Gierke
530e7c773e DATAREST-1121 - Skip last modified detection for query methods that project.
For an execution of a projecting query method we now skip the last modified detection as it actually doesn't make sense if applied to non-aggregates.
2017-08-24 22:19:18 +02:00
Oliver Gierke
2a8eb44cc9 DATAREST-1111 - Prepare next development iteration. 2017-07-25 16:10:35 +02:00
Oliver Gierke
ccc5b228cd DATAREST-1111 - Release version 3.0 RC2 (Kay). 2017-07-25 15:34:24 +02:00
Oliver Gierke
59a9d4d7df DATAREST-1093 - Prepare next development iteration. 2017-07-25 10:00:06 +02:00
Oliver Gierke
e54f908218 DATAREST-1093 - Release version 3.0 RC1 (Kay). 2017-07-25 09:48:49 +02:00
Oliver Gierke
5836baaabf DATAREST-1105 - Polishing.
Simplified code a bit. Formatting. Adapted integration tests to make sure URI templates are always expanded.

Original pull request: #273.
2017-07-19 16:05:27 +02:00
Haroun Pacquee
0d7d84571f DATAREST-1105 - Association links now advertise projections.
Association links now explicitly indicate projections are available in case there are projection types registered for the association target type.

Original pull request: #273.
2017-07-13 17:24:43 +02:00
Oliver Gierke
c922ba38d2 DATAREST-1106 - Moved off deprecated methods to setup a ProjectionFactory in configuration.
Switched from ProxyProjectionFactory.setResourceLoader(…) to ….setBeanClassLoader(…). Some generics polishing and removal of obsolete warnings supression.
2017-07-11 11:00:33 +02:00
Oliver Gierke
2ad963074c DATAREST-1104 - Adapt to API changes in mapping subsystem. 2017-07-04 15:27:54 +02:00
Oliver Gierke
069869a69b DATAREST-540 - Renamed RepositoryRestConfiguration bean config to repositoryRestConfiguration. 2017-06-20 13:03:17 +02:00
Oliver Gierke
585072a1b7 DATAREST-1060 - Improve AssociationOmittingSerializerModifier to not break on Jackson 2.9.
According to this upstream ticket [0] we need to override BeanSerializerModifier.changeProperties(…) rather than ….updateBuilder(…). The commit just does that.

[0] https://github.com/FasterXML/jackson-databind/issues/1664

Related ticket: FasterXML/jackson-databind#1664
2017-06-19 17:39:23 +02:00
Mark Paluch
b62c950b4a DATAREST-1071 - Prepare next development iteration. 2017-06-14 17:14:07 +02:00
Mark Paluch
1c5d3b4c76 DATAREST-1071 - Release version 3.0 M4 (Kay). 2017-06-14 17:03:48 +02:00
Oliver Gierke
51812ccc97 DATAREST-1092 - Removed Spring 4.3 style handling of non-nullability in PatchOperations. 2017-06-14 15:32:40 +02:00
Oliver Gierke
37b0dc2dff DATAREST-1092 - Improve exception handling in PatchOperation for Spring 5 compatibility.
We now also catch SpelEvaluationException in the attempt to set a null value for an expression as Spring 5 now reports a failed attempt (e.g. if the target type is not nullable) using that type whereas Spring 4.3 threw a NullPointerException.
2017-06-14 11:26:37 +02:00
Oliver Gierke
bc5a265ff9 DATAREST-1031 - Fixed setup of ExceptionHandlerExceptionResolver.
Fixed the setup of our custom ExceptionHandlerExceptionResolver to conclude with a call to afterPropertiesSet() to make sure it's properly initialized.
2017-06-09 10:04:41 +02:00
Oliver Gierke
e4f34aaa67 DATAREST-1076 - Expose constructor that takes RelProvider of RepositoryResourceMappings.
We now expose the constructor that takes a RelProvider in RepositoryResourceMappings so that clients can tweak the default relation names. Changed the order of constructor parameters of (previously) non-public constructors for consistency.

The RelProvider to be used with the mappings can now be configured via RepositoryRestConfiguration and defaults to the EvoInflector based one.
2017-05-18 14:49:44 +02:00
Oliver Gierke
9a9512767e DATAREST-1039 - Fix appending a complex value appended to a collection via JSON Patch.
When a PATCH call using JSON Patch tried to append an item to an empty collection, it previously failed to look up the type to unmarshal the incoming payload to. We now inspect the declared types on the wrapped object's property to determine that type for append operations.

Also, an uninitialized collection is now initialized using Spring's CollectionFactory.
2017-05-12 14:54:24 +02:00
Mark Paluch
793c09270d DATAREST-1052 - Prepare next development iteration. 2017-05-09 11:34:41 +02:00
Mark Paluch
edaf6197e2 DATAREST-1052 - Release version 3.0 M3 (Kay). 2017-05-09 11:23:00 +02:00
Oliver Gierke
f906695e7a DATAREST-1064 - Adapt to API changes in repository interfaces.
Additional cleanups in QuerydslAwareRootResourceInformationHandlerMethodArgumentResolver to make sure a QuerydslRepositoryInvokerAdapter is only applied if the QuerydslPredicateBuilder actually exposes a predicate. Extracted a couple of methods to make sure the mapping pipeline reads nicely.
2017-05-03 18:10:27 +02:00
Mark Paluch
f94a534fac DATAREST-1019 - Consider base URI when resolving cross-origin configuration on repositories.
We now consider the base URI when resolving CORS configuration from repository interfaces. The base URI is now stripped from the request. Previously the base URI was not stripped from the request and was used to determine an exported resource.
2017-04-18 19:55:29 +02:00
Oliver Gierke
2ebc688631 DATAREST-1055 - Move to Optional for base link handling in repository controllers. 2017-04-18 13:20:18 +02:00
Oliver Gierke
2b347daaab DATAREST-1050 - PUT for create now makes sure the resource id is set on the instance to create.
So far, we handed the plain instance deserialized from the request body to the repository to persist it. That caused issues in PUT for create scenarios where the URI contains the identifier to be used for the aggregate to create and identifier generation being used in the backend. In that case the identifier submitted was never considered and subsequent requests would've created new instances, effectively breaking the idempotent nature of PUT.

We now make sure the backend identifier derived from the resource is set on the aggregate instance about to be created, so that backend can either accept that situation (new entity + manually defined identifier) or reject it (in case it insists on identifier generation).
2017-04-11 09:10:04 +02:00
Oliver Gierke
359513fe9b DATAREST-1030 - Reinstantiate PATCH behaviour for associations.
We now completely opt out of merging values if the property is a linkable association.
2017-04-10 19:08:03 +02:00
Oliver Gierke
680d84fe4e DATAREST-946 - Prepare next development iteration. 2017-04-04 22:08:15 +02:00
Oliver Gierke
fceb36ff71 DATAREST-946 - Release version 3.0 M2 (Kay). 2017-04-04 21:12:35 +02:00
Oliver Gierke
b9957d1a6c DATAREST-1008 - Adapt to API changes in Spring Data Commons, Java 8 upgrades and Mockito 2.7. 2017-03-24 11:02:54 +01:00
Oliver Gierke
a13f51b49e DATAREST-1003 - Entity resources don't answer arbitrary JSON requests.
Previously, when a request was sending an Accept header of some arbitrary *+json, the request was routed through the controllers and might have ended up producing a PersistentEntityResource that was then mapped using an uncustomized Jackson ObjectMapper. That has caused a huge JSON object to be unfolded which is highly undesirable.

We now only answer JSON requests to repository resources that contain an Accept header with any of the explicit JSON media types we got registered.

Tweaked the setup of the ExceptionHandlerExceptionResolver to not expose a bean in the first place but rather use the Spring MVC provided callbacks to register custom ones. We also now make sure MVC is bootstrapped property for integration tests through the inclusion of DelegatingWebMvcConfiguration.
2017-03-01 21:39:51 +01:00
Oliver Gierke
8ad81978b0 DATAREST-995 - Removed support for ~ to reference a last collection element in JSON Patch.
Completely removed the support for ~ in favor of the previously introduced support for the correct indicator -.
2017-02-08 19:59:08 +01:00
Oliver Gierke
4e2edd2d37 DATAREST-995 - Fixed detection of collection append operations for JSON Patch requests.
We previously erroneously looked for a ~ in a JSON Pointer to indicate collection append in e.g. an add operation. We now also support the actually correct - keeping the original behavior for now to not break clients that currently make use of it.
2017-02-08 19:59:08 +01:00
Jens Schauder
ea482e0577 DATAREST-994 - Fixed two argument constructor of RepositoryRestHandlerMapping.
Repositories in RepositoryCorsConfigurationAccessor may be null now. findCorsConfiguration returns null when no repositories are provided.

Original pull request: #257.
2017-02-03 09:07:20 +01:00