Created Apr 19 2023
The release 3.0 is a cornerstone release, because it is the first official release post-Java 11, and is built for Java 16. Many features that were added to the project, were added to this release and were not ported to previous releases for Java 8 and Java 11. Since this release took so long, it will be followed by a new release 3.1 for Java 17 LTS almost unchanged.
As the Internet development pretty much standardized on JSON as the linqua-franqa of the Internet, JavaLite added a number of conveniences working with JSON, be it reading, writing, validating many other features.
Here is a new constructor for the class JSONMap
public class JSONMap extends HashMap<String, Object> {
public JSONMap(String ... keysAndValues){
super(map(keysAndValues));
} }
It allows writing one-liners to create map objects that are JSON-enabled:
new JSONMap("first_name", "Marylin", "last_name", "Monroe"); JSONMap person =
see more: Implement a convenience constructor
jsonString(...)
for example, a call:
String person = JSONHelper.toJsonString("first_name", "Marilyn", "last_name", "Monroe");
will generate a string:
{"first_name": "Marilyn","last_name": "Monroe"}
If your controller expects a JSON request that can be converted to a map, you can convert the request into a map using the method: getRequestJSONMap()
:
public class MyController extends AppController {
@POST
public void index1(){
getRequestJSONMap();
JSONMap request = put("last_name", "Doe"); // adding more stuff to the map
request....
}
A corresponding getRequestJSONList()
was also added.
Responding with JSON from controllers also got easier:
@POST
public void index1(){
respondJSON(request);
}
The method respondJSON(obj)
will try to convert any object to a JSON string and will also set the Content-type header to application/json
.
The same convenience is also available for sending JSON documents from controller tests:
@Test
public void shouldPostJSONMap(){
String doc = """
{"first_name" : "John"
}""";
request().json(doc).post("index1");
Note, that the method json(..)
accepts a String and automatically sets the application/json
content type.
Additionally, two more methods were added to the controller specs that help parse controller output: responseJSONMap()
and responseJSONList()
. here is a whole spec example:
public void shouldPostJSONMap(){
String doc="""
{"first_name" : "John"
}""";
request().json(doc).post("index1");
responseJSONMap();
JSONMap response=the(response).shouldContain("first_name");
}
These methods make controller specs easier to write and to read.
This library also benefited from the added JSON support:
get("https://www.serice...");
Get p = Http.jsonMap();
JSONMap map = p.// or:
jsonList(); JSONList list = p.
Of course, watch out for a runtime exception in case the output is not JSON.
Documentation coming soon.
In the meantime, you can review the latest Release Notes: