2.8.20180718034955
Version: 2.8.20180718034955
Support for inheritance with a single repository per type hierarchy
A new attribute subTypes was introduced to @JsonApiResource to specify an inheritance relationship. For example:@JsonApiResource(type = "task", subTypes = SpecialTask.class) public class Task { // fields, getters and setters } @JsonApiResource(type = "specialTask", resourcePath = "task") public class SpecialTask extends Task{ // fields, getters and setters }SpecialTask extends Task but is configured to use the same resourcePath, meaning SpecialTask does not have to bring along its own repository implementation, but is served by the task repository. For more information have a look at the documentation.
Microservice example
There is a new spring-boot-microservice-example application. It showcases how to establish relationships between resources of two separate microservices. The relationship supports the full JSON API feature, most notable the use of inclusions. Behind the scenes crnk-client is used to let one Crnk instance access another Crnk instance.@JsonApiExpose annotation
@JsonApiExpose can be used to hide a resource repository from the JSON API endpoint. It is used by the preceding microservice example to hide the remote repositories on the local endpoint while making them available internally to perform relationship inclusions.InMemoryResourceRepository default implementation
There is a default implementation for a in-memory resource repository that is backed by a ConcurrentHashMap. It can be useful to get started quickly, use for mocking and work with small data sets.Spring Boot Auto Configuration for Tomcat 8.5+
There is a bit of a controversy about which characters to encode or not encode in URLs based on RFC 7230 and RFC 3986. JSON API is affected in that regard due to the use of [ and ]. Browser vendors have yet to endorse those RFCs. But unfortunately, Tomcat already started to enforce the RFCs from their side. As such it is useful to relax the [ and ] characters to simplify development with JSON API, like entering URLs manually in the browser. For this purpose `relaxedPathChars` can be set to `[]`, for more information see https://stackoverflow.com/questions/41053653/tomcat-8-is-not-able-to-handle-get-request-with-in-query-parameters The Spring Boot auto configuration already does this out-of-the-box with this release.Comma-separated filter parameters
Multiple filter values can now be separated by comma:http://127.0.0.1:8080/api/tasks?filter[name][EQ]=SomeTask,OtherTaskRepositories then will typically use an OR to return resources matching any of one the filter values. The behavior can be disabled in DefaultQuerySpecUrlMapper.setAllowCommaSeparatedValue(...) if desired.