Commit Graph

155 Commits

Author SHA1 Message Date
Tom Bunting
dd4ec341b5 #337 - Fixed potential double-encoding in Traverson.
We now avoid calling URI.toString() to early to prevent the need to re-parse it and thus accidentally cause a double-encoding.

Original pull request: #382.
2015-09-03 12:39:04 +02:00
Oliver Gierke
71ec26fc8d #378 - HAL links get title attributes rendered resolved through a resource bundle.
HalLinkListSerializer now tries to obtain a link title by looking up key _links.$rel.title for both the namespaced (curied) and local link relation if the former doesn't resolve into a message.
2015-08-19 19:07:07 +02:00
Oliver Gierke
d77a4b65f5 #320 - Overhaul in curie rendering.
The curie rendering has been improved in the following ways:

- Resources now get their embeds inspected for namespaced keys and curies are added if at least one is found. This makes sure curies are also rendered if no namespaced link is registered.
- Nested resources skip curies entirely, assuming they have been added to the root correctly.

Had to change the order of _embedded and _links to make sure the embedded elements are processed first to tweak the links to indicate the need for curies.
2015-08-19 16:35:04 +02:00
Oliver Gierke
d8cc666703 #363 - Extended DefaultCurieProvider to be able to configure multiple curies.
DefaultCurieProvider now also takes a Map<String, UriTemplate> to expose multiple curies. The default curie to be used to expand unprefixed, non-IANA link relations has to be defined explicitly in case more than one curie is if given. If there's only one, that becomes the default, too.
2015-08-13 21:31:17 +02:00
Oliver Gierke
dcf692cbdb #375 - Fixed is-empty evaluation for TrueOnlyBooleanSerializer on Jackson 2.6.
Added missing override for isEmpty(…) that gets used by Jackson 2.6+ to prevent { templated : false } get rendered in HAL link representations.

Polished Javadoc on the way.
2015-08-11 21:17:20 +02:00
Przemek Nowak
2cec9982b5 #247 - Added HAL_JSON_VALUE in MediaTypes.
Original pull request: #329.
2015-08-04 10:56:19 +02:00
Oliver Gierke
e9d83c5c48 #369 - Traverson no defensively expands URIs handed to getAndFindLinkWithRel(…). 2015-08-04 10:35:44 +02:00
Oliver Gierke
07a5620d9f #368 - Assert Jackson 2.6.0 compatibility.
Switched from overrides of the deprecated (and removed in 2.6) isEmpty(T) to isEmpty(SerializerProvider, T). Switched from deprecated @JsonSerialize(include = …) to the dedicated @JsonInclude annotation.
2015-08-04 10:35:44 +02:00
Oliver Gierke
ab613f85ac #360 - Improved TypeConstrainedHttpMessageConverter on generics matching.
We now locally resolve the generic type using Jackson's JavaType in canRead(Type, Class, MediaType) to avoid having to call the non-generic method as this caused us having to tweak it's implementation to avoid the super.canRead(Class, MediaType) check as this in turn forwards to the generic method (which then would've caused a stack overflow.
2015-08-04 10:35:43 +02:00
Oliver Gierke
28234e16a5 #360 - Tweaked TypeConstrainedMappingJackson2HttpMessageConverter to reject all types not matching the configured one.
We now also override canRead(Type, Class<?>, MediaType) to make sure we can opt out of being used for generic type matching.
2015-08-04 10:35:43 +02:00
Oliver Gierke
3b30c7832e #346 - Polishing.
Turned hop into a real value object by making it immutable. Added unit tests for Hop. use verbose concept names instead of abbreviations (e.g. parameters instead of params). Additional assertions and the documentation of such in JavaDoc. @since tag in new Hop class.

Original pull request: #350
2015-05-23 18:50:32 +02:00
Greg Turnquist
2c1797d9b7 #346 - Enhance Traverson.follow() to customize individual hops.
Introduced a dedicated value object to abstract a Hop within a relation traversal. The Hop consists of a relation name and optional local template parameters that are applied to this particular hop when traversing it.

Changed the implementation of Traverson to work with Hops instead of plain rels and merges the global template parameters with the hop-local ones before expanding the templates found.

Original pull request: #350.
2015-05-23 18:47:24 +02:00
Oliver Gierke
bbb75885d5 #342 - Polishing.
Extracted exception message into a constant. Added author where necessary and extended copyright headers. Fixed import order. Moved unit test into ControllerLinkBuilderUnitTest. Tweaked it to use JUnit rule.

Original pull request: #344.
2015-05-21 14:56:55 +02:00
Greg Turnquist
b592ddda92 #342 - Augment error message when building link without a web request.
We now explicitly check whether we could look up request attributes and throw an exception with a message indicating the cause of the failure.

Original pull request: #344.
2015-05-21 14:47:39 +02:00
Oliver Gierke
4c2c6d5a4a #341 - Default ObjectMapper for HAL now ignores unknown properties.
We now explicitly disable the "fail on unknown properties" deserialization feature for the ObjectMapper instance used with our default HAL setup to be able to use it with a RestTemplate out of the box.
2015-05-17 17:26:33 +02:00
Oemer Yildiz
312fa3ead9 #331 - Fixed handling of @RequestParam with default value set.
ControllerLinkBuilderFactory now checks the default value of an @RequestParam annotated handler method parameter before triggering strict validation.

Original pull request: #332.
2015-04-13 16:41:34 +02:00
Oliver Gierke
2bcfd92c3b #321 - Remove dependency to Objenesis.
We're now using the inlined version of Objenesis in Spring Framework to avoid the additional dependency.
2015-03-19 13:34:41 +01:00
Oliver Gierke
dc90d23da7 #314 - HalLinkDiscoverer now also works for URI rels.
Relation names can be fully qualified URIs. HalLinkDiscoverer now quotes the relation name handed into the constructor so that the expression parsing works as expected.
2015-03-09 23:30:24 +01:00
Oliver Gierke
de59fa40b9 #313 - Assert compatibility with JSONPath 0.9 and 1.2.
We now reflectively invoke the JSONPath.compile(…) method as the method signature has changed but we need to stay compatible with 0.9 to allow the Spring Data Evans release train to upgrade to 0.17 without a major third-party dependency upgrade.

Copied the reflective method lookup from Spring's JsonPathExpectationsHelper.

Related ticket: #297, #305.
2015-03-02 16:05:12 +01:00
Oliver Gierke
c3dcdf1b9e #306 - Renamed type references types to allow more concise usage.
Renamed the Resource, Resources and PagedResources types in TypeReferences to *Type so that new TypeReferences.Resources<User>() {} now becomes new ResourcesType<User>() {}.

Prior to this change a static import of TypeReferences would've cause the actual Resource types to be fully qualified.
2015-03-02 12:48:21 +01:00
Oliver Gierke
0021d3818a #267 - Polishing. 2015-02-27 16:08:27 +01:00
Kellen Dye
bc0737361c #267 - Added ResourceSupport.add(Link... links). 2015-02-27 16:08:04 +01:00
Oliver Gierke
1efb5a53bf #310 - Added missing package-info.java files. 2015-02-27 15:03:27 +01:00
Oliver Gierke
32d7c9bf51 #309 - Fixed calculation of total pages in PageMetadata. 2015-02-27 14:56:31 +01:00
Matteo Castellini
1ae44c1896 #237 - Added missing variable in call to ControllerLinkBuilder.linkTo(…).
673f82d introduced a glitch in a delegation within ControllerLinkBuilder.linkTo(Class<?> controller, Method method, Object... parameters) which is fixed by this commit.

Original pull request: #300.
2015-02-27 13:03:41 +01:00
Oliver Gierke
b00bbe7504 #209 - Polishing.
Fixed imports in production code and test cases. Extended copyright range. Extracted request parameter handling into dedicated method. Added missing ticket reference.

Original pull request: #210.
2015-02-27 12:57:56 +01:00
rossturner
65f0c451d5 #209 - Added support for Map<String, String> and MultiValueMap<String, String> RequestParams in ControllerLinkBuilderFactory.
Original pull request: #210.
2015-02-27 12:56:42 +01:00
Oliver Gierke
912337669a #258 - Traverson now exposes default configuration per media types.
Introduced Traverson.getDefaultMessageConverters(…) to be able to obtain the list of default HttpMessageConverters depending on the given media types. Added overloads for varargs as well as a List for consistency.
2015-02-26 21:25:31 +01:00
Oliver Gierke
78fb2c4bc1 #307 - Introduced TraversalBuilder.asTemplatedLink().
TraversalBuilder.asTemplatedLink() allows to obtain the final link of a hypermedia traversal in unexpanded form.
2015-02-26 19:58:12 +01:00
Oliver Gierke
9c45341564 #306 - Introduced TypeReferences helper to create ParameterizedTypeReferences easily.
TypeReferences contains a set of predefined types that allows to shortcut the creation of ParameterizedTypeReference instances a bit, which is very useful for the usage on the client side (e.g., via RestTemplate).

new ParameterizedTypeReference<Resources<Resource<User>>>() {};

becomes

new TypeReferences.Resources<Resource<User>>() {};

The latter can even be abbreviated by using a static import for TypeReferences.
2015-02-26 19:52:19 +01:00
Oliver Gierke
8d5424a6db #305 - Dependency upgrades.
Spring Framework 3.2.9 -> 3.2.13
Jackson 2.4.1 -> 2.4.3
JSONPath 0.9.1 -> 1.2.0
Slf4j 1.7.7 -> 1.7.10
Evo Inflector 1.2 -> 1.2.1

Adapted HalLinkDiscoverer to stricter checking of JSONPath expression.
2015-02-26 15:08:05 +01:00
Oliver Gierke
bf9584f91e #281 - UriTemplate now has convenience method to add a single template variable. 2015-02-10 19:48:56 +01:00
Ori Schwartz
ea4c1064c1 #273 - Fixed assertion in UriTemplate. 2015-02-10 14:59:47 +01:00
Oliver Gierke
a90e2f32c3 #286 - EmbeddedWrappers now allows empty collections if a rel or type is provided.
EmbeddedWrappers.wrap(Object, String) now allows empty collections. Also a new emptyCollectionOfType(Class<?>) was introduced to allow the RelProvider kick in and dynamically resolve the lazily.

Added more details to the JavaDoc of EmbeddedWrapper to make clear that we either expect a static rel returned or a type to resolve the rel from. Make HalEmbeddedBuilder detect invalid implementations and reject them although that should never occur if users use EmbeddedWrappers factory.
2015-02-10 14:49:43 +01:00
Oliver Gierke
c41b28e00d #271 - UriTemplate now correctly expands non-optional path segments. 2015-02-10 14:17:33 +01:00
Oliver Gierke
313afe1cc7 #293 - HypermediaSupportBeanDefinitionRegistrar also augments RestTemplates.
We now also augment HttpMessageConverters for RestTemplate Spring beans.
2015-02-10 14:13:29 +01:00
Jeff Stano
3ca6fa5504 #229 - Added support for curies in HalEmbeddedBuilder.
HalEmbeddedBuilder now takes an optional CurieProvider to create namespaced rels for embeddededs.

Original pull request: #233.
2014-12-02 09:20:49 +01:00
Oliver Gierke
994347c005 #257 - Added support for Forwarded and X-Forwarded-Proto headers.
ControllerLinkBuilder now favors the value of the Forwarded and X-Forwarded-Proto header to build the scheme for the link created.

For more information on the Forwarded header, see http://tools.ietf.org/html/rfc7239.

Related issue: #107.
2014-12-02 08:17:17 +01:00
Oliver Gierke
0bb2216502 #228 - TemplateVariable now correctly rejects invalid parameters. 2014-08-22 17:14:42 +02:00
Oliver Gierke
5882fcf0d6 #219 - HAL setup now registers a more strict HttpMessageConverter.
Previously we registered a special HttpMessageConverter with a custom ObjectMapper to deploy the HAL customizations. That converter was added to Spring MVC registered HandlerAdapters and registered as the first converter.

In case Spring MVC handled a request with Accept header */* or no Accept header at all, this meant that this converter kicked in and served HAL even for objects that don't need the customizations.

We now restrict the applicability of that special HttpMessageConverter to subtypes of ResourceSupport so that it will only be chosen if the object to render is of such type.
2014-07-25 10:24:30 +02:00
Oliver Gierke
67aa51dbea #217 - Improve UriTempalte's handling of TemplateVariables.
TempalteVariables now concatenates all request parameter styles correctly. UriTemplate uses continued style of request parameters if the base URI already contains request parameters.
2014-07-23 15:53:55 +02:00
Oliver Gierke
377f4adff8 #141 - Added model to build ALPS documents.
Added the necessary abstractions to build an ALPS [0] document.

[0] http://alps.io
2014-07-09 16:02:20 +02:00
Oliver Gierke
8fba900aee #212 - Traverson can now return the last link. 2014-07-08 20:59:35 +02:00
Oliver Gierke
a363122be9 #185 - Traverson can now get LinkDiscoverers configured.
Moved to a setter based configuration for both the RestOperations and LinkDiscoverers to be used.

Related pull request: #189.
2014-07-08 20:40:21 +02:00
Dietrich Schulten
c1e940c5f3 #201 - Traverson can now take a customized RestTemplate.
Traverson now has an additional constructor taking a RestOperations instance which will be used instead of the default one. This allows more fine grained control over the HTTP request infrastructure used when performing link traversals.

Some internal polishing (moved from RestTemplate to RestOperations).

Original pull request: #203.
2014-07-08 14:40:27 +02:00
Kory Markevich
921d1af9fb #206 - Set class loader for dummy method proxies.
The Enhancer used to create the proxy instances wasn't explicitly
setting the class loader to use, which meant by default the proxied
class's class loader was chosen. This is fine for controller classes, but
in some containers the return types for the controller may have a
class loader that doesn't have access to Spring, resulting in
ClassNotFoundExceptions. For example, returning a JAX-RS class JBoss.
Using the controller's class loader when proxying the return type solves
this. 

Related issues: #136.
2014-06-30 08:44:17 +02:00
Oliver Gierke
d4d788d9e0 #205 - Jackson2ModuleRegisteringBeanPostProcessor now looks up dependent beans lazily.
We now only lookup the beans, Jackson2ModuleRegisteringBeanPostProcessor needs to post-process other beans if the post-processing is really needed. This avoids premature initialization of those dependent beans.
2014-06-24 16:09:21 +02:00
Oliver Gierke
0b4b3c1ad9 #199 - Refactorings in HalEmbeddedBuilder.
We now provide a dedicated EmbeddedWrappers API that HalEmbeddedBuilder uses to transparently handle the collection enforcement etc. It also allow manually hand in EmbeddedWrapper instances to enforce a certain behavior independent of the global settings in HalEmbeddedBuilder.

Simplified HalResourcesSerializer in Jackson2Hal module as we now don't have to deploy custom serializers for the embedded elements anymore.

Supersedes some of the API introduced for #195.
2014-06-12 10:46:30 +02:00
Oliver Gierke
40ceba3c47 #198 - TemplateVariables now drops duplicate TemplateVariable instances. 2014-06-11 10:21:21 +02:00
Oliver Gierke
20bfa86c5f #195 - HalEmbeddedBuilder now considers RelAware on objects added.
This change introduces a RelAware interface for objects to implement which want to enforce a particular rel to be used in the _embedded clause. This is useful if the objects being added are not categorized by type but rather by their role in the context of the main object.
2014-06-10 10:46:46 +02:00