The following example demonstrates applying of resource representation constraints using the RepresentationConstaints utility:
/**
* {@code BookResourceFactory} provides utility factory methods for creating and initializing various demo resources.
*/
public class BookResourceFactory {
/**
* Creates a {@link BookResource} instance and reinitializes its fields based on the {@link Book} instance given as
* argument. The {@link Book} representation is customized based on the representation constraints given as argument.
*
* @param book - {@link Book} instance which fields will be used to initialize new {@link BookResource}'s fields.
* @param constraints - {@link RepresentationConstraints} instance encapsulating the representation constraints for
* the device resource fields
* @return {@link BookResource}
*/
public static BookResource getBookResource(Book book, RepresentationConstraints constraints) {
BookResource newBook = new BookResource();
if (constraints.include(IdentifiableResourceFields.HREF)) {
newBook.setHref(UriBuilder.fromPath("/demo/bookstore/books/" + book.getId()).build());
}
if (constraints.include(IdentifiableResourceFields.ID)) {
newBook.setId(book.getId());
}
if (constraints.include(BookResourceFields.AUTHOR)) {
newBook.setAuthor(book.getAuthor());
}
if (constraints.include(BookResourceFields.TITLE)) {
newBook.setTitle(book.getTitle());
}
if (constraints.include(BookResourceFields.COUNT)) {
newBook.setCount(book.getCount());
}
return newBook;
}
.....
}
A sample transfer of a customized BookResource representation in JSON using HTTP 1.1 protocol:
GET /demo/bookstore/books/3?include=title,author HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: Basic YWRtaW46YWRtaW4=
HTTP/1.1 200 OK
Content-Type: application/json
X-Representation-Include: title,author
{
"title": "The Pragmatic Programmer: From Journeyman to Master",
"author": "Andrew Hunt"
}
A sample error response reporting an invalid representation constraints syntax error via an ErrorDescription representation in JSON:
GET /demo/bookstore/books/2?include=href,,,, HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: Basic YWRtaW46YWRtaW4=
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"status": 400,
"code": 50021,
"description": "Representation constraints expression has invalid syntax : Empty field name: href,,,,",
"exception": {
"name": "org.osgi.framework.InvalidSyntaxException",
"code": -1,
"message": "Empty field name: href,,,,",
"stacktrace": "org.osgi.framework.InvalidSyntaxException: Empty field name: href,,,,
com.prosyst.mbs.services.rest.util.BasicUtils.insertComplexExpression(BasicUtils.java:279)
com.prosyst.mbs.services.rest.util.BasicUtils.parseComplexExpression(BasicUtils.java:243)
......
}
}