Commit Graph

1641 Commits

Author SHA1 Message Date
Oliver Gierke
2bfa422ee7 DATAREST-328, DATAREST-320 - AssociationOmittingSerializerModifier now correctly considers renamed properties.
Previously, if a persistent property was renamed using e.g. @JsonProperty, the lookup of the PersistentProperty failed as BeanPropertyWriter exposes the final (renamed) property name, not the internal one. We now defensively lookup the correct BeanPropertyDescriptor using the external name and use the corresponding internal one for the PersistentProperty lookup.
2014-06-27 18:43:02 +02:00
Oliver Gierke
ed77540a81 DATAREST-335 - ReflectionRepositoryInvoker correctly handles overridden delete(…) methods.
If a delete(…) method was overridden using the concrete id type, the check on invocation of course has to accommodate the concrete id type and not serializable only. 

We previously erroneously attempted a to-entity-conversion by invoking findOne(…) and then handed that result to the delete(…) method which caused an IllegalArgumentException as the argument wasn't matching the parameter type. We now explicitly check for the concrete id type in the first place and even bypass any kind of parameter conversion.
2014-06-27 17:05:15 +02:00
Oliver Gierke
2f1e9824cd DATAREST-336 - Default to ISO8601 date rendering. 2014-06-26 12:13:38 +02:00
Oliver Gierke
0f5d790dbd DATAREST-331 - Fixed NullPointerException in ResourcesProcessorWrapper.
During type matching in ResourcesProcessorWrapper we now accomodate the scenario that a Resources type is completely different than the Resources type to look for. This resulted in null being returned for the supertype generics lookup and this failed as the corresponding guard was missing.
2014-06-26 11:24:55 +02:00
Oliver Gierke
e70285331c DATAREST-333 - Added controller mappings for OPTIONS requests.
The root resource, collection and item resources as well as the search and query method resources now expose a handler method to handle OPTIONS requests and return a response with the Allow header set to the HTTP methods appropriate to the resource requested.

Added some additional methods for HEAD requests and a few integration tests for functionality that previously existed.

Related ticket: DATAREST-330.
2014-06-26 09:43:37 +02:00
Oliver Gierke
8618b7df8e DATAREST-182 - Removed obsolete wirings from AbstractRepositoryRestController.
Removed the wirings for PlatformTransactionManager and ValidationExceptionHandler from AbstractRepositoryRestController. Removed the latter entirely as it doesn't seem to be used anywhere anyway.
2014-06-24 23:38:16 +02:00
Oliver Gierke
dc695eecd1 DATAREST-331 - Fixed invocation of processors for Resources subtypes in ResourceProcessorHandlerMethodReturnValueHandler.
ResourceProcessorHandlerMethodReturnValueHandler now also invokes ResourceProcessors that are typed to Resources even if the value returned by the controller is a sub-type of it.

Also added test cases for the invocation of processors for projections.
2014-06-24 19:35:12 +02:00
Oliver Gierke
5dbbbf9703 DATAREST-330 - Exposed resources now support HEAD requests where reasonable.
The collection and item resources as well as the search and query method resources now answer HEAD requests according to the repository definition.
2014-06-24 18:31:23 +02:00
Oliver Gierke
b5f8d97ba3 DATAREST-329 - Improved RepositoryRestMvcConfiguration to not eagerly initialize beans.
The bean definition for annotatedHandlerBeanPostProcessor now is a static one so that it doesn't require the config class to be instantiated and populated, which caused the (too) eager initialization of all dependent beans.

Also we now leniently lookup all ResourceProcessor instances available in the context to prevent the lookup during config class preparation.

Ignore Neo4j tests now as they run into OutOfMemoryErrors.
2014-06-24 16:13:01 +02:00
Oliver Gierke
57732db3ad DATAREST-327 - DomainObjectMerger doesn't merge empty collections.
The association handling in DomainObjectMerger is in place to allow the creation of resources using PUT that have non-optional associations. However, if the domain types that the request payload was unmarshalled into use default values - in particular empty collections to avoid nulls - the merger cannot really distinguish between the default set in the type versus an empty collection being submitted through the request.

As the usecase here is creation only we can safely ignore empty collections as submitting those doesn't make a difference anyway (no related items attached). By ignoring those, we fix the issue defaulted empty collections in the type definitions being considered as value to set.
2014-06-20 13:55:32 +02:00
Oliver Gierke
173d528e47 DATAREST-325 - ReflectionRepositoryInvoker now makes method accessible before invoking.
This allows methods in package protected repository interfaces to be invoked successfully.
2014-06-20 11:52:34 +02:00
Elnur Abdurrakhimov
a9305cab33 DATAREST-323 - Fix typos and remove a duplicated word.
Original pull requests: #140, #141.
Related tickets: DATAREST-324.
2014-06-20 11:52:22 +02:00
Oliver Gierke
59beb1db1a DATAREST-318 - BaseUri now correctly strips template variables from request.
Bugfix in BaseUri to correctly strip template variables when the repository lookup path is obtained from a NativeWebRequest.
2014-06-12 13:16:17 +02:00
Oliver Gierke
3969c34940 DATAREST-317 - Support for excerpt projections.
This commit adds a mechanism to define excerpt projections to be rendered for exposed repositories. The main user facing mechanism is the addition of the excerptProjection attribute to @RepositoryRestResource. This attribute takes a type which has to be a projection interface (see DATAREST-221 for more information about the general mechanism).

If such a excerpt projection is in place, it will be used by default when rendering instances of the domain type in _embedded clauses or if it is related to.

class Person {

  String name;
  int age;
  Person father;
  Person mother;
  Set<Person> siblings:
}

interface PersonExcerpt {
  String getName();
}

If PersonExcerpt is now configured as excerpt projection for Person the collection resource for people will return:

{ _embedded : {
    people : [{
      name : "Some name",
      _embedded : {
        mother : { name : "…" },
        father : { name : "…" },
        siblings : [ … ]
      },
      _links : { self : { href : "…" }}
    }, … ]
  }
}

Here you can see how the age property is omitted when rendering a person in a collection. Also each person contains the excerpt projections of related resources and the links to them omitted. If you now follow the link to the item resource, you'll something like this:

{ name : "Some name",
  age : 34,
  _embedded : {
    mother : { name : "…" },
    father : { name : "…" },
    siblings : [ … ]
  },
  _links : {
    self : { href : "…" },
    mother : { href : "…" },
    father : { href : "…" },
    siblings : { href : "…" }
  }
}

Note, that age appears, as the representation is now rendered entirely. We also see the excerpts of related resource but also the links pointing to them in case you want to manage them.
2014-06-12 13:16:12 +02:00
Oliver Gierke
a1c54b2475 DATAREST-316 - UriStringDeserializer now guards against UriTemplate.
We now defensively guard against URI templates submitted for related resources and expand the incoming URI string source to avoid URI.create(…) to fail.

Also, RepositoryPropertyReferenceController.loadPropertyValue(…) now also uses UriTemplate to guard against Uri templates provided for property references.
2014-06-12 12:44:51 +02:00
Rodrigue Bouleau
582b13a7f7 DATAREST-311 - Fixed execution of query methods for compact media type.
Fixed the request parameter binding of RepositorySearchController. executeSearchCompact(…). Changed returned value to Resources to be able to use the EMPTY_RESOURCES_LIST constant to indicate no actual results.

Original pull request: #139.
2014-06-02 12:04:11 +02:00
Oliver Gierke
aa0bd6c99e DATAREST-306 - After release cleanups. 2014-05-20 20:04:40 +02:00
Spring Buildmaster
2db0203817 DATAREST-306 - Prepare next development iteration. 2014-05-20 20:04:39 +02:00
Spring Buildmaster
c67f79d5ae DATAREST-306 - Release version 2.1.0.RELEASE. 2014-05-20 20:04:39 +02:00
Oliver Gierke
e9e4da3062 DATAREST-306 - Prepare 2.1 GA. 2014-05-20 20:04:32 +02:00
Oliver Gierke
e61e6794e3 DATAREST-306 - Updated changelog. 2014-05-20 16:26:41 +02:00
Oliver Gierke
5c507edb52 DATAREST-307 - Fixed handling of root resource on Tomcat.
We're now using a single slash to make sure the downstream method mapping works as expected.
2014-05-20 13:39:21 +02:00
Thomas Darimont
9f58e2452c DATAREST-305 - Enable Java 8 build in maven configuration.
Extended closed interval in maven enforcerer plugin configuration to include Java 8 (1.8).

Original pull request: #138.
2014-05-19 11:37:59 +02:00
Oliver Gierke
ca3b3bb354 DATAREST-301 - Fixed location header creation for self links containing URI templates.
We now consistently expand the self links created before adding them as location header to make sure we can create a URI instance successfully.
2014-05-06 12:10:55 +02:00
Oliver Gierke
fe3c10bead DATAREST-300 - BaseUri now removes URI template variables from lookup path.
BaseUri now strips away the tail of a lookup path starting with {. An unencoded { must never appear in a URI but could accidentally be sent by a client forgetting to expand URI templates we return.
2014-05-05 14:26:17 +02:00
Oliver Gierke
ef7cf82441 DATAREST-297 - After release cleanups. 2014-05-02 15:46:29 +02:00
Spring Buildmaster
cafa6f7931 DATAREST-297 - Prepare next development iteration. 2014-05-02 06:15:33 -07:00
Spring Buildmaster
5693af6f2a DATAREST-297 - Release version 2.1.0.RC1. 2014-05-02 06:15:31 -07:00
Oliver Gierke
683e0afacf DATAREST-297 - Prepare 2.1.0.RC1.
Upgraded to Spring Data Parent 1.4.0.RC1 and Spring Data Commons 1.8.0.RC1. Switched to milestone repository.
2014-05-02 15:01:45 +02:00
Oliver Gierke
bbd94c22ef DATAREST-297 - Updated changelog. 2014-05-02 15:01:28 +02:00
Oliver Gierke
ef66ccca35 DATAREST-297 - Forward port changelog entries from bugfix branch. 2014-05-02 12:53:09 +02:00
Oliver Gierke
b458378bbc DATAREST-276 - Yet another round of trailing slash handling.
We need to proactively strip trailing slashes during base URI handling as even on a successful match (which previously left trailing slashes intact) this might subsequently on the resolving of the repository metadata when evaluating the left-over lookup path against the @RequestMapping methods (which keeps trailing slashes).
2014-05-02 11:19:44 +02:00
Oliver Gierke
358ff1bda8 DATAREST-297 - Prepare 2.1.0.RELEASE.
Upgraded to Spring HATEOAS 0.11.0, Spring Plugin 1.1.0 and Evo Inflector 1.1.
2014-05-01 20:52:29 +02:00
Oliver Gierke
b2927eb5a0 DATAREST-276 - Improved BaseUri to accomodate trailing slashes.
We now strip trailing and leading slashes from configured base URI to make sure the matching algorithm accommodates both lookup paths with and without trailing slashes.

Added a few more tests in shape of unit tests for BaseUri.
2014-05-01 14:47:42 +02:00
Oliver Gierke
addaea62ef DATAREST-276 - Improve base URI handling.
Introduced BaseUri value object being able to extract the lookup path within the Spring Data REST URI namespace from requests and plain lookup paths. This encapsulates the logic we previously had in RepositoryRestHandlerMapping but it is needed in the HandlerMethodArgumentResolver implementations as well to make sure they extract RepositoryMetadata correctly.
2014-04-30 15:01:07 +02:00
Oliver Gierke
e5dbc30d8a DATAREST-276 - Fixed ArrayIndexOutOfBoundsException in RepositoryRestHandlerMapping.
We now make sure the RepositoryRestHandlerMapping correctly refrains from handling the request in case the URI doesn't match the configured base URI.
2014-04-30 13:36:54 +02:00
Oliver Gierke
b844b95a27 DATAREST-276 - RepositoryRestHandlerMapping now works with absolute base URIs.
Refined the algorithm to detect the lookup path within the configured base URI, even if the base URI was defined in an absolute way. Also, solidified the implementation against URIs with trailing slashes.
2014-04-29 16:44:49 +02:00
Oliver Gierke
b73ae0fd1b DATAREST-298 - Fixed rel lookup in RepositoryMethodResourceMapping.
In case @RestResource was used to customize the path a method resource was mapped to, we didn't correctly fall back to the method name as rel in case no rel was configured explicitly.

We now check for a rel being configured and fall back to the method name if we don't discover manual configuration.
2014-04-29 12:29:48 +02:00
Oliver Gierke
7dfdaa5114 DATAREST-294 - RepositoryRestConfiguration has more fine grained control over media type defaults.
RepositorRestConfiguration now has a ….useHalAsDefaultJsonMediaType() which defaults to true. Configuring this to false allows to still use HAL as default media type in case no Accept header is set or it is set to */*. The flag decides what to return when an Accept header is set to application/json.
2014-04-29 10:09:15 +02:00
Oliver Gierke
b69b715a66 DATAREST-292, DATAREST-296 - RepositoryLinkBuilder now honors absolute base URIs.
In case a base URI is an absolute one, we now rely on only the base URI as foundation for all links created. Relative base URIs are considered are considered an amendment to the current server base up until the servlet mapping. The latter allows to create a dedicated URI namespace for Spring Data REST exposed resources.
2014-04-29 09:54:17 +02:00
Oliver Gierke
45ef259826 DATAREST-292 - Fixed application of configured base URI.
Major overhaul of mapping detection in RepositoryRestHandlerMapping. We now correctly map URIs if a base URI is configured via RepositoryRestConfiguration.
2014-04-23 17:56:28 +02:00
Oliver Gierke
eb3d073714 DATAREST-257 - Upgrade to snapshot dependencies. 2014-04-17 18:51:25 +02:00
Oliver Gierke
9f1a08d412 DATAREST-288 - Removed javax.validation dependency from schema controller. 2014-04-10 09:23:41 +02:00
Spring Buildmaster
d0ccd7251d DATAREST-257 - Prepare next development iteration. 2014-03-31 08:33:17 -07:00
Spring Buildmaster
b5b5b94f01 DATAREST-257 - Release version 2.1.0.M1. 2014-03-31 08:33:14 -07:00
Oliver Gierke
08864ba5b5 DATAREST-257 - Prepare 2.1 M1. 2014-03-31 17:26:55 +02:00
Oliver Gierke
fc4eb30aa1 DATAREST-279 - Fixed creation of point instances from longitude and latitude. 2014-03-25 10:36:56 +01:00
Oliver Gierke
a0395002d0 DATAREST-281 - Upgraded to Spring Data Gemfire 1.4.0.BUILD-SNAPSHOT. 2014-03-21 18:51:13 +01:00
Oliver Gierke
162bba05d5 DATAREST-280 - Improvements in RepositoryRestConfiguration.
Removed custom subclass to use @EnableHypermediaSupport as this was effectively a workaround for SPR-11251, fixed in Spring 3.2.7.

Move away from autowiring all MappingContexts into the configuration as this will require the instances to be created when the configuration class is prepared. We now rather inspect the BeanFactory on access of persistentEntities().
2014-03-21 18:17:52 +01:00
Oliver Gierke
174d3d0e8c DATAREST-279 - Marshalling support for new geo types.
Added StringTo(Distance|Point)Converter implementations to be able to submit Distances and Points via URIs. See the JavaDoc of those classes for more details.

RepositoryRestMvcConfiguration now also registers the GeoModule provided by Spring Data Commons with the ObjectMapper registered for our custom HttpMessageConverters.
2014-03-21 18:12:03 +01:00