In this part we will look at Serializable
classes and how they enable us to handle the payload of a request body. We will then proceed to set up and integrate our PostgreSQL database.
What are Serializable objects?
These objects are responsible for encoding and decoding the payload of a request. To use one of these, extend the Serializable
class and override the asMap()
and readFromMap()
methods.
The example here creates a Read
subclass responsible for extracting the title
, author
and year
fields from the request payload as well as returning the same fields in a JSON response.
class Read extends Serializable {
String title;
String author;
int year;
@override
Map<String, dynamic> asMap() => {
'title': title,
'author': author,
'year': year,
}
@override
void readFromMap(Map<String, dynamic> requestBody) {
title = requestBody['title'] as String;
author = requestBody['author'] as String;
year = requestBody['year'] as int;
}
}
So the asMap()
method takes in the instance members of Read
and returns a Map
structure, useful when returning JSON responses.
readFromMap()
is used when extracting the request payload keys into our instance properties. This allows us to therefore bind our instance to the body
payload parameter that comes in our POST request method:
class ReadsController extends ResourceController {
...
...
@Operation.post()
Future<Response> createNewRead(@Bind.body() Read body) async {
// Notice the `body` parameter cast to the `Read` Serializable subclass
...
}
...
...
}
See how this works in more detail and how we integrate a fully functional PostgreSQL database in the full video.