Why deserialize into JsonObject type? Why not use a class type that has the expected structure in it? E.g.

```java
class ClusterNodesRequest {
  String clusterId;
  Set<String> properties;
  Set<String> services;
}
```

This would simplify a lot of the manual decoding logic here and make the code more reusable in future (say, you could encapsulate encode/decode logic into TypeAdapter if needed).