THIS IS A TEST INSTANCE ONLY! REPOSITORIES CAN BE DELETED AT ANY TIME!

JSON partial responses for Java
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Thibault Meyer 5e8c4d55d8
Prepare for release 19.11
4 주 전
.github Create FUNDING.yml 6 달 전
src Prepare for release 19.07 4 달 전
.editorconfig add "max_line_length" on .editorconfig 11 달 전
.gitignore First working version 3 년 전
.travis.yml Fix Travis Java version 4 달 전
LICENSE Update license header 1 년 전
README.md Prepare for release 19.11 4 주 전
checkstyle-suppressions.xml Simplify code 10 달 전
checkstyle.xml Fix Collection<?> and maximum depth 3 년 전
pom.xml Prepare for release 19.11 4 주 전

README.md

Partialize

Latest release JitPack Build GitHub license Total alerts

Partialize is a Java based library helping you to implement the JSON partial responses on your project.


Questions and issues

The GitHub issue tracker is only for bug reports and feature requests. Anything else, such as questions for help in using the library, should be posted in StackOverflow under tags partialize and java.

Build the library

To compile Partialize, you must ensure that Java 8 and Maven are correctly installed.

#> mvn compile
#> mvn package

Query syntax

Example #1
fields=firstName,lastName,posts(title,createDate)
Example #2
fields=firstName,lastName,posts(*)

Usage

Objects to render as JSON

@Partialize(
    allowedFields = {"uid", "firstName", "lastName", "emails", "createDate"},
    defaultFields = {"uid", "firstName", "lastName"}
)
public class AccountModel {
    private UUID uid;
    private String firstName;
    private String lastName;
    private String password;
    private List<AccountEmailModel> emails;
    private DateTime createDate;

    /* ADD GETTER / SETTER METHODS HERE */
}
@Partialize(
    allowedFields = {"uid", "email", "isDefault"},
    defaultFields = {"email", "isDefault"}
)
public class AccountEmailModel {
    private UUID uid;
    private String email;
    private Boolean isDefault;

    /* ADD GETTER / SETTER METHODS HERE */
}

Joda DateTime converter

public class JodaDateTimeConverter implements Converter<DateTime> {

    private static final String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";

    @Override
    public void convert(final String fieldName, final DateTime data, final ObjectNode node) {
        node.put(fieldName, data.toString(JodaDateTimeConverter.DATETIME_FORMAT));
    }

    @Override
    public void convert(final String fieldName, final DateTime data, final ArrayNode node) {
        node.add(data.toString(JodaDateTimeConverter.DATETIME_FORMAT));
    }

    @Override
    public Class<DateTime> getManagedObjectClass() {
        return DateTime.class;
    }
}

Code

PartializeConverterManager.getInstance().registerConverter(new JodaDateTimeConverter());
final AccountModel account = AccountModel.find().where().eq("id", 1).findUnique();

final String fields = "firstName,lastName,emails(email,isDefault),createDate";
final Partialize partialize = new Partialize();
final ContainerNode result = partialize.buildPartialObject(fields, AccountModel.class, account);
System.out.println(result);

Output

{
    "firstName": "John",
    "lastName": "Smith",
    "emails": [
      {
        "email": "john.smith@domain.local",
        "isDefault": true
      },
      {
        "email": "john@domain.local",
        "isDefault": false
      }
    ],
    "createDate": "2016-01-15T23:45:12"
}

Field aliases

final AccountModel account = AccountModel.find().where().eq("id", 1).findUnique();

final String fields = "alias1,alias2";
final Partialize partialize = new Partialize();
partialize.setAliases(new HashMap<String, String>() {{
    put("alias1", "firstName");
    put("alias2", "lastName");
}});
final ContainerNode result = partialize.buildPartialObject(fields, AccountModel.class, account);
System.out.println(result);

Access policies

final AccountModel account = AccountModel.find().where().eq("id", 1).findUnique();

final String fields = "uid,firstName,lastName,password";
final Partialize partialize = new Partialize();
partialize.setAccessPolicy(accessPolicy -> {
    return Arrays.asList(
        "AccountModel.uid",
        "AccountModel.firstName",
        "AccountModel.lastName"
    ).contains(accessPolicy.clazz.getSimpleName() + "." + accessPolicy.field);
});
final ContainerNode result = partialize.buildPartialObject(fields, AccountModel.class, account);
System.out.println(result);

License

This project is released under terms of the MIT license.