Commit Graph

767 Commits

Author SHA1 Message Date
Mathias Düsterhöft
8de60dccda DATAREST-885 - PatchOperation now evaluates SpEL expression.
Original pull request: #223.
2016-09-12 11:24:14 +02:00
Oliver Gierke
c2f88f26dd DATAREST-887 - Polishing.
Code formatting. Author tags. Assertions in Constructor. JavaDoc.

Original pull request: #224.
2016-09-12 11:22:09 +02:00
Mathias Düsterhöft
987dec8c17 DATAREST-887 - JsonPatchPatchHandler now uses external ObjectMapper.
The previously static ObjectMapper used by JsonPatchPatchHandler now has to be provided by clients instantiating the handler.

Original pull request: #224.
2016-09-12 11:21:55 +02:00
Oliver Gierke
82c95d5c4e DATAREST-881 - Fixed assignment checks of ResolvableTypes for wildcarded method return types.
ResourceProcessorInvoker suffered from Spring's ResolvableType.fromClass(…) using strong assignability checks between raw types and wildcarded right hand side types (i.e. Collection VS. Collection<?>). This has been reported [0] and fixed already but we have to switch to ResolvableType.fromRawClass(…) to get the desired assignment check behavior.

Tightened unit tests to verify the calls to the delegate handler, which had been disabled by accident and thus prevented us from detecting the issue with ResolvableType beforehand.

[0] https://jira.spring.io/browse/SPR-14648
2016-09-01 16:32:54 +02:00
Oliver Gierke
7ab5efcf43 DATAREST-880 - Prevent nested-entity-as-resource handling for unwrapped properties.
We now exclude properties that are marked as to be unwrapped from getting the nested-entity-as-resource behavour applied as it doesn't make any sense.
2016-08-29 19:28:22 +02:00
Oliver Gierke
33edab4b1e DATAREST-837 - DomainObjectMerger doesn't nullify read-only properties on PUT.
PUT requests are supposed to replace the state of the resource with the request payload. However, Spring Data REST already handles a couple of domain object propoerties in a special way as theri values map to dedicated HTTP features: identifiers (URIs), last-modified dates (header) etc.

For users, it might be worthwhile to exclude other properties from being set by applying the payload, like properties that are completely under the control of the server, e.g. creation user and date, last modifying user etc. So far, users didn't have any means to exclude those properties as the handling of PUT requests treated every missing property of the payload as null value.

DomainObjectMerger now checks whether a property is actually writable before applying the implicit null value. The application can be disabled by annotation a property with @ReadOnlyProperty.
2016-08-18 13:11:41 +02:00
Oliver Gierke
cc9d0f41ed DATAREST-866 - Avoid premature initialization of RepositoryRestMvcConfiguration.
Previously, RepositoryRestMvcConfiguration declared a BeanPostProcessor instance in a non-static bean factory method. That required Spring to instantiate the configuration class and keeping it in uninitialized state, which could in turn cause issues downstream.

We now use a static method so that the container can obtain the bean instance without having to create an instance of the configuration class and thus deferring its initialization.
2016-08-08 12:09:22 +02:00
Oliver Gierke
094bb99cbd DATAREST-863 - Adapt to changes in Accept header lookup in Spring 4.3.
Spring 4.3's HeaderContentNegotiationStrategy switched from looking up the Accept header via the method returning a single (potentially comma separated) one to the method returning multiple headers in the first place. We now added an override of HttpServletRequestWrapper.getHeaders(…) to out custom adapter defaulting the media type to make sure the defaulting is visible and thus the right handler methods are looked up.

That previously missing caused the DelegatingHandlerMapping selecting the redirect to the HAL browser in case a request to the API root was sent without an accept header as the defaulting of the header to application/hal+json wasn't properly exposed anymore and the redirect to the browser — declaring a produces clause of text/html — was not causing any media type mismatch anymore.
2016-08-04 21:15:26 -07:00
Oliver Gierke
dfd48f589d DATAREST-803 - Updated changelog. 2016-07-28 09:02:47 +02:00
Oliver Gierke
3be006ba2f DATAREST-847 - RepositoryEntityCotroller.saveAndReturn(…) now uses save result.
Previously we handed the original entity to the AfterSaveEvent. This should work in most cases but actually repositories are allowed to return a completely different instance so that we now hand over the instance returned by the repository interaction to avoid potentially occurring issues.
2016-07-01 14:45:18 +02:00
Oliver Gierke
56ac72a262 DATAREST-804 - After release cleanups. 2016-06-15 14:17:54 +02:00
Oliver Gierke
d58d628098 DATAREST-804 - Prepare next development iteration. 2016-06-15 14:17:52 +02:00
Oliver Gierke
c0262db1d3 DATAREST-804 - Release version 2.5.2 (Hopper SR2). 2016-06-15 13:45:52 +02:00
Oliver Gierke
48612b69b2 DATAREST-804 - Prepare 2.5.2 (Hopper SR2). 2016-06-15 13:44:53 +02:00
Oliver Gierke
f3ad5d5d1c DATAREST-804 - Updated changelog. 2016-06-15 13:44:48 +02:00
Oliver Gierke
d73d85d9fa DATAREST-815 - Tweaked HalBrowser controller implementation to consider proxied requests.
We now use the APIs in place in Spring MVC to make sure we create proper redirects for requests that carry proxy headers so that the redirect target is still going through the proxy.
2016-04-27 15:34:22 +02:00
Oliver Gierke
6d3f2c3137 DATAREST-801 - Improved nested value handling in ValidationErrors.
We now correctly handle nested values by manually traversing the potentially nested property path, creating a PropertyAccessor for each nesting step considering the property access settings defined in the mapping metadata.
2016-04-14 21:34:44 +02:00
Oliver Gierke
b312920d66 DATAREST-809 - Fixed application of explicit projections for excerpts.
A refactoring in the course of the 2.5 development dropped the application of explicit projection in case of excerpts being requested. This particularly applies to collection resources with explicit projection requests which need to get the explicit projection applied over the default excerpt projection potentially registered.

This is now fixed by the explicitly selected projection (if existing) always trumping the excerpt one.
2016-04-14 20:12:29 +02:00
Oliver Gierke
29f90e0f6b DATAREST-805 - ValidationError nor exposes rejected value as is.
Previously ValidationError captured the toString() variant of the rejected value. We now return the rejected value as is.
2016-04-14 20:12:26 +02:00
Oliver Gierke
8de9e39167 DATAREST-802 - After release cleanups. 2016-04-06 22:51:45 +02:00
Oliver Gierke
c3bdae7520 DATAREST-802 - Prepare next development iteration. 2016-04-06 22:51:43 +02:00
Oliver Gierke
df7499608b DATAREST-802 - Release version 2.5.1 (Hopper SR1). 2016-04-06 22:32:15 +02:00
Oliver Gierke
cdccb5bc13 DATAREST-802 - Prepare 2.5.1 (Hopper SR1). 2016-04-06 22:31:41 +02:00
Oliver Gierke
7944277f5e DATAREST-802 - Updated changelog. 2016-04-06 22:31:36 +02:00
Oliver Gierke
69d62019d6 DATAREST-790 - Prepare next development iteration. 2016-04-06 16:38:18 +02:00
Oliver Gierke
c49a29a247 DATAREST-790 - Release version 2.5 GA (Hopper). 2016-04-06 16:35:59 +02:00
Oliver Gierke
18173c96bf DATAREST-790 - Prepare 2.5 GA (Hopper). 2016-04-06 16:34:46 +02:00
Oliver Gierke
cfbeab88d2 DATAREST-790 - Updated changelog. 2016-04-06 16:34:40 +02:00
Oliver Gierke
5f3bb2f90e DATAREST-790 - Fix build to be re-runnable without cleaning.
Changed the Ant-Run task to copy artifacts into the classpath rather than moving them so that a repeated build run will find the artifacts again.
2016-04-06 15:07:39 +02:00
Massimo Mangoni
78c468532b DATAREST-790 - Fixed typos in the reference documentation.
Original pull request: #203.
2016-04-06 13:26:23 +02:00
Mark Paluch
350a464d75 DATAREST-799 - Point to the appropriate Jira project. 2016-04-05 14:17:32 +02:00
Mark Paluch
874cff6033 DATAREST-799 - Add pull request template.
Add pull request template containing instructions in a todo list style to facilitate the contribution process.

Original pull request: #211.
2016-04-04 16:15:43 +02:00
Oliver Gierke
b530cbe471 DATAREST-798 - Fixed invalid implementation of ValidationErrors.
Changed the implementation of ValidationErrors to be based on AbstractBeanPropertyBindingResult to consider the nesting implemented in superclasses and using a PersistentPropertyAccessor to lookup the property values.

ValidatingRepositoryEventListener now uses this implementation if a PersistentEntity can be obtained for the type under consideration, falling back to a DirectFieldBindingResult otherwise.
2016-04-04 15:12:33 +02:00
Oliver Gierke
9e58ab92c5 DATAREST-720 - HAL Browser fragment now considers the context path if set.
Removed some obsolete Maven dependency versions along the way.
2016-04-01 12:59:37 +02:00
Oliver Gierke
47e89d9fec DATAREST-792 - Fixed handling of PUT request with customized entity lookups.
Until now, the controller handling a PUT request for an item resource defensively tried to set the identifier of the entity to update to guard against request payloads accidentally modifying the identifier of entities to be uploaded by using the raw identifier from the URI. Through the introduction of customized entity lookups this isn't necessarily the actual entity identifier anymore.

We now apply this defensive logic in the argument resolver for the incoming PersistentEntityResource where we have access to the object to update, can lookup the actual identifier directly and set it back after Jackson has applied the request body to the object to update.

Related tickets: DATAREST-724.
2016-04-01 11:31:10 +02:00
Oliver Gierke
ccdeae7bbd DATAREST-791 - Association resources now considers customized id lookup.
RepositoryPropertyReferenceController now uses a RepositoryInvoker instead of the ConversionService so that potentially applied customized entity lookups are considered during that lookup.

Extracted HttpHeadersPreparer to remove functionality and dependencies from the commons superclass of all Spring Data REST controllers in favor of a dedicated type.

Related tickets: DATAREST-724.
2016-04-01 10:42:18 +02:00
Oliver Gierke
e5a1f2d1cf DATAREST-794 - Upgraded to Solr 5.5 to make integration tests work again. 2016-04-01 10:42:18 +02:00
Oliver Gierke
d37bf77703 DATAREST-782 - After release cleanups. 2016-03-18 11:16:07 +01:00
Oliver Gierke
05c723fe50 DATAREST-782 - Prepare next development iteration. 2016-03-18 11:15:51 +01:00
Oliver Gierke
03a720d1c0 DATAREST-782 - Release version 2.5 RC1 (Hopper). 2016-03-18 11:15:00 +01:00
Oliver Gierke
90d94df1ea DATAREST-782 - Prepare 2.5 RC1 (Hopper). 2016-03-18 11:06:58 +01:00
Oliver Gierke
1d867d6474 DATAREST-782 - Updated changelog. 2016-03-18 11:06:54 +01:00
Oliver Gierke
4430e78966 DATAREST-787 - Remove dependency to JSON Patch library.
Switched to own JSON Patch implementation built by Craig Walls for Spring Sync back in the days.
2016-03-18 09:47:27 +01:00
Oliver Gierke
6075f3052a DATAREST-782 - Fixed build after Spring 4.2.5 update.
Upgraded to JSONPath 1.1.0 as 0.9 is not supported with Spring 4.2 anymore. Tweaked integration tests due to changed semantics and internals of JSONPath >= 1.0.
2016-03-17 21:29:20 +01:00
Oliver Gierke
2be6b2b6a9 DATAREST-776, DATAREST-775 - Integration tests for lookup types and nested associations.
Added shop integration test example that shows and tests nested associations and both unique and collection lookup type references.
2016-02-29 19:40:12 +01:00
Oliver Gierke
892409da2c DATAREST-774 - Separated integration tests from core project to avoid classpath overlap.
Extracted store specific tests into separate test modules to prevent classpath overlap between projects. Those tests are now executed in an "it" build profile to prevent the tests being packaged for distribution on release.

Use Map-based repositories and mapping contexts for test in the Core and WebMvc module.

Slightly changed the configuration API for lookup types on RepositoryRestConfiguration.

Related ticket: DATAREST-776.
2016-02-29 19:40:10 +01:00
Oliver Gierke
897bc88d69 DATAREST-775 - Support for nested association links.
Tweaked custom Jackson serialization to make sure nested entities are rendered as resources so that links to related resources can be collected on nested levels as well.

Extracted EmbeddedResourcesAssembler from PersistentEntityResourceAssembler so that embedded resources can also be build for nested entities. Extracted a ResourceProcessorInvoker from ResourceProcessorHandlerMethodReturnValueHandler to allow ResourceSupport instances created for nested entities get the ResourceProcessor instance registered for them invoked as well.

ProjectionDefinitionRegistrar now also allows the domain type of a repository being registered as excerpt, too.

Related tickets: DATAREST-776.
2016-02-29 19:38:59 +01:00
Oliver Gierke
6b9f274388 DATAREST-766 - Updated changelog. 2016-02-23 14:27:24 +01:00
Oliver Gierke
5ffc1c1ce4 DATAREST-756 - After release cleanups. 2016-02-12 15:43:57 +01:00
Oliver Gierke
c74576b91e DATAREST-756 - Prepare next development iteration. 2016-02-12 15:43:39 +01:00