Commit Graph

734 Commits

Author SHA1 Message Date
Greg Turnquist
6a6cd31113 #1223 - Polishing. 2020-04-02 12:17:26 -05:00
Greg Turnquist
fae4cf0e68 #1224 - Polishing. 2020-04-02 12:15:44 -05:00
Greg Turnquist
600a975732 #1224 - Polishing. 2020-04-02 12:12:37 -05:00
Greg Turnquist
8dfa4d707f #1224 - Polishing. 2020-03-31 14:18:59 +02:00
Oliver Drotbohm
131ec70a6b #1244 - Update changelog. 2020-03-31 14:18:59 +02:00
Oliver Drotbohm
14f6375234 #1244 - Polishing.
Added missing license headers and a bit of formatting. Nullability annotations in HypermediaWebTestClientConfigurer.
2020-03-31 13:52:05 +02:00
Greg Turnquist
904a03a241 #1224 - Provide API for users to easily configure WebClient instances.
Introduce `HypermediaWebClientConfigurer` with a simple API that registers hypermedia types via `WebClient.Builder`.

Deprecate `WebClientConfigurer`, leveraging the new solution.

Update reference documentation showing how to use it, with and without Spring Boot.
2020-03-30 23:00:20 -05:00
Greg Turnquist
dea0001da2 #1223 - Provide API to configure RestTemplate with hypermedia.
Create a HypermediaRestTemplateConfigurer bean registered as a Spring HATEOAS bean.

Update reference documentation to show how to use it directly and with Spring Boot via RestTemplateCustomizer.
2020-03-30 22:20:27 -05:00
Greg Turnquist
4e697b899b #1225 - Polishing.
Appears one test case exerted a false positive. Fixing it exposed a gap and how to properly configure an existing WebTestClient (which is now in the reference docs).
2020-03-30 16:13:42 -05:00
Greg Turnquist
898752f0d5 #1225 - Provide implementation of WebTestClientConfigurer to support hypermedia registration.
Expand reference documentation to show ways to use it directly or via Spring Boot.
2020-03-30 12:23:07 -05:00
Oliver Drotbohm
6c09839cca #1241 - Additional factory methods for CollectionModel and PagedModel.
Added overloads of ….empty() to allow adding links right on construction.
2020-03-27 14:52:19 +01:00
Greg Turnquist
b5ee56a129 #1208 - Polishing. 2020-03-19 12:50:14 -05:00
Greg Turnquist
934ae0320f #1208 - Migrate from Lombok's experimental @Wither to @With.
Lombok has moved their "wither" annotation annotation out of experimental phase and replaced it with @With.
2020-03-18 12:13:04 -05:00
Greg Turnquist
48718bb180 #1216 - Polishing. 2020-03-12 12:05:24 -05:00
Vedran Pavic
3a2551072e #1216 - Provide String constants in IanaLinkRelations.
This commit adds String constants to IanaLinkRelations, so that IanaLinkRelations can be leveraged in places where compile time constants are required, such as Relation#itemRelation and Relation#collectionRelation.
2020-03-11 23:06:20 +01:00
Vedran Pavic
1f49360637 #1215 - Update RFC-5988 references to RFC-8288.
Update code, javadoc, and documentation changes.
2020-03-09 14:35:18 -05:00
Oliver Drotbohm
4b090108a9 #1199 - Update changelog. 2020-02-12 00:09:12 +01:00
Oliver Drotbohm
258f71611b #1193 - Polishing.
Prefer Spring WebFlux' CustomCodecs.registerWithDefaultConfig(…).

Original pull request: #1206.
2020-02-11 18:33:44 +01:00
Greg Turnquist
7ce980b6b7 #1193 - Revised usage of Spring Web Encoder APIs.
Spring Web has deprecated several Encoder/Decoder APIs and Spring HATEOAS must revise its usage.

Original pull request: #1206.
2020-02-11 18:33:27 +01:00
Oliver Drotbohm
c687e0a9c1 #1205 - Fix nullability warnings in EntityModelProcessorWrapper.isValueTypeMatch(…). 2020-02-11 18:12:32 +01:00
Oliver Drotbohm
6ff57dea4c #1204 - Fix nullability declarations of VndError.path.
The property and constructor arguments for it are now properly declared as nullable.
2020-02-11 18:10:56 +01:00
Oliver Drotbohm
1d18a9a8f7 #1202 - Polish imports and formatting. 2020-02-11 18:09:45 +01:00
Oliver Drotbohm
9a73194e1b #1201 - Switched to EntityModel factory methods where possible. 2020-02-11 18:08:34 +01:00
Oliver Drotbohm
290b58858a #1200 - Removed deprecation of Link.of(String, String). 2020-02-11 18:06:39 +01:00
Oliver Drotbohm
29479b82d9 #1198 - Moved of deprecated @Wither in favor of @With. 2020-02-11 18:05:34 +01:00
Oliver Drotbohm
79ed8ba798 #1189 - Polishing.
Switched to a less complicated implementation of the interface method parameter annotation lookup by using Spring's ClassUtils.getInterfaceMethodIfPossible(…).

Simplified test cases to pure unit test on the link builder APIs. We don't need to fully execute a complete MVC/WebFlux request/response cycle to verify the link creation to pick up the parameter annotations from the interfaces.

Original pull request: #1194.
2020-02-11 16:52:21 +01:00
Greg Turnquist
d499b63c9d #1189 - Look for web annotations in interfaces.
When forming links, look at a controller class's interface definitions for possible Spring Web annotations.

Related issues: spring-projects/spring-framework#15682
Original pull request: #1194.
2020-02-11 16:39:48 +01:00
Oliver Drotbohm
d1c1fbb01f #1172 - Polishing.
A bit of Javadoc on the factory methods. Avoiding abbreviations in method names, shorter parameter names. More trailing whitespace removal.

Reformatting of method invocation in test cases.

Original pull request: #1192.
2020-02-11 15:08:41 +01:00
Greg Turnquist
f1bc790a23 #1172 - Provide static helpers to build TemplateVariable instance.
We now expose static factory methods to make code setting up a UriTemplate with TemplateVariable instances.

Original pull request: #1192.
2020-02-11 15:07:19 +01:00
Roland Krüger
d1889d29ce #1190 - Fix typos, document links, and grammatical errors.
Unfinished sentences were marked with ellipsis….
2020-02-03 13:46:21 +01:00
Oliver Drotbohm
749bfda399 #1113 - Update changelog. 2020-01-15 08:26:27 +01:00
Greg Turnquist
0e8f79c0aa #1142 - Update CHANGELOG for 1.0.2.RELEASE. 2020-01-15 08:25:01 +01:00
Oliver Drotbohm
ad3e35bdf1 #1165 - Fix for potential NullPointerException in UriTemplate.
UriTemplate.with(TemplateVariable) now properly forwards the UriBuilderFactory from the current instance.
2020-01-14 14:03:36 +01:00
Oliver Drotbohm
60cf2a828e #1116 - Revisit factory methods of RepresentationModel.
This commit introduces ….of(…) factory methods on all RepresentationModel types as well as Link. RepresentationModel.of(…) transparently creates a EntityModel or CollectionModel depending on the value handed into the method.
2020-01-14 13:46:55 +01:00
Oliver Drotbohm
37896bc244 #786 - Added documentation for HTTP Problem Details media type support. 2020-01-13 22:46:19 +01:00
Oliver Drotbohm
17644464d9 #786 - Redesign of the support for the HTTP Problem spec (RFC-7807).
Problem has been redesigned for immutability. Extensions to the payload body are now implemented by wrapping a either an object exposing the properties to add in turn or a plain Map.

Added infrastructure configuration to make sure that Problem instances returned from controller methods (even if wrapped into a ResponseEntity<?>) cause the ContentType header to be set to application/problem+json. HyperMediaMappingInformation now allows to customize the root domain type to signal serialization support for.

Few cleanups regarding the ObjectMapper setup in test cases.
2020-01-13 22:46:04 +01:00
Oliver Drotbohm
0d25b2e66e #1169 - Update copyright years to 2020. 2020-01-10 12:26:41 +01:00
Oliver Drotbohm
ffbed21254 #1166 - Fix premature initialization of downstream dependencies of WebConverters.
RestTemplateHateoasConfiguration is a BeanPostProcessor and previously used a direct reference to WebConverters which caused downstream dependencies to be initialized once Spring Framework looks up BeanPostProcessors. This renders all of those dependencies ineligible of being post-processed by other BeanPostProcessors in turn.

This is now fixed by using an ObjectProvider<WebConverters> from within RestTemplateHateoasConfiguration instead, so that the initialization is delayed until the processing of the first bean is triggered.
2020-01-06 21:56:07 +01:00
Oliver Drotbohm
ebe7038a48 #1157 - Fixed custom EntityModel serialization for Map payloads.
Using a custom serializer seems to break downstream projects that also register serializers for EntityModel. We're now using extra methods on EntityModel itself that do the trick as well.
2019-12-12 10:03:21 +01:00
Oliver Drotbohm
5502bfdf85 #1159 - HalConfiguration now exposes whether to enforce arrays in embedded clauses.
The flag to control this had been directly configured on the HalHandlerInstantiator which wasn't accessible to users in the first place. Refined the setup and forwarding of the bean factory into HalHandlerInstantiator so that non-Spring-HATEOAS Jackson serializer lookups are routed through the Spring container potentially picking up prototype bean definitions.
2019-12-11 22:10:13 +01:00
Oliver Drotbohm
aef81d1e57 #1157 - Tweaks to EntityModel to allow deserialization with Map<String, Object> content.
We now keep internal methods in EntityModel that are configured using Jackson annotations so that it'd populate the content with a Map in case Map<String, Content> is defined as payload type.
2019-12-11 18:56:28 +01:00
Oliver Drotbohm
8cf23aa721 #1157 - Register custom serializers to handle Map based EntityModel instances.
We now register a custom serializer to massage EntityModel instances into dedicated types that – in case of a Map being the content of the entity model – wrap the model into a type that applies the necessary Jackson tweaks to properly unwrap a Map.
2019-12-11 09:36:21 +01:00
Greg Turnquist
a084686156 #786 - Deprecate VndErrors and VndError. 2019-12-10 10:07:28 -06:00
Greg Turnquist
20bff3e26f #786 - Implement vendor neutral error handling with RFC-7807. 2019-12-10 10:00:23 -06:00
Greg Turnquist
4f3be119c0 #775 - Clean up VndError implementation to match spec.
* Handle single, multiple, and nested errors.
* Retain backward compatibility with existing constructors.
2019-12-10 09:56:11 -06:00
Oliver Drotbohm
6bb2310682 #1155 - Fixed thread-safety issues in AnnotationLinkRelationProvider.
We now use a ConcurrentReferenceHashMap to cache annotation lookups in AnnotationLinkRelationProvider to avoid thread-safety issues.
2019-12-10 15:23:06 +01:00
Oliver Drotbohm
a2290c692a #1132 - HAL link relation rendering now applies Jackson's PropertyNamingStrategy.
The rendering of HAL's link relations now applies Jackson's PropertyNamingStrategy if one is configured except it's a IANA link relation. This behavior can be opt out from by setting HalConfiguration.withApplyPropertyNamingStrategy(false).

LinkRelation now has a ….map(…) method allowing the post-processing of it given a Function<String, String>. By default, that's applied to all relations that are not IANA ones. HalLinkRelation applies this transformation to only the local part of the relation. Tweaked IanaLinkRelations.isIanaLinkRelation(…) to do a simple ….contains(…) check first before we stream over all values to apply a case insensitive check.
2019-12-10 11:29:21 +01:00
Oliver Drotbohm
8f1f355c9f #1154 - WebFlux Link creation starts with clean query parameters.
We now explicitly remove all query parameters from the base URI we use when creating links from method names.
2019-12-09 16:02:07 +01:00
Oliver Drotbohm
26c44dcc98 #1152 - Allow adding path segments to links created via WebFluxLinkBuilder.
WebFluxLinkBuilder now allows to call ….slash(…) in symmetry to other LinkBuilder implementations.
2019-12-09 12:10:10 +01:00
Oliver Drotbohm
8e96eafb37 #1150 - WebFluxLinkBuilder now considers the requests context path.
The base URI we create now consists of the requests root URI plus the context path concatenated. On actual UriComponentsBuilder creation we then simply append the path discovered from the method mapping.
2019-12-09 12:10:07 +01:00