{"id":15667630,"url":"https://github.com/treblereel/mapper-json","last_synced_at":"2026-03-06T00:32:07.502Z","repository":{"id":41133987,"uuid":"484926573","full_name":"treblereel/mapper-json","owner":"treblereel","description":"APT based j2cl/gwt compatible jakarta JSONB like marshallers","archived":false,"fork":false,"pushed_at":"2025-11-06T18:44:42.000Z","size":346,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-11-06T20:33:05.366Z","etag":null,"topics":["closure-compiler","gwt","j2cl","java","json","jsonb"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/treblereel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-04-24T04:44:01.000Z","updated_at":"2025-11-06T18:44:47.000Z","dependencies_parsed_at":"2024-10-03T14:04:45.732Z","dependency_job_id":"f30e8e01-98fe-429c-b2d1-1e6a1441d278","html_url":"https://github.com/treblereel/mapper-json","commit_stats":{"total_commits":50,"total_committers":2,"mean_commits":25.0,"dds":0.06000000000000005,"last_synced_commit":"3179ef2c038408343bc1b37b53387b38ab52b5f0"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/treblereel/mapper-json","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/treblereel%2Fmapper-json","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/treblereel%2Fmapper-json/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/treblereel%2Fmapper-json/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/treblereel%2Fmapper-json/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/treblereel","download_url":"https://codeload.github.com/treblereel/mapper-json/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/treblereel%2Fmapper-json/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30156286,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T22:39:40.138Z","status":"ssl_error","status_checked_at":"2026-03-05T22:39:24.771Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["closure-compiler","gwt","j2cl","java","json","jsonb"],"created_at":"2024-10-03T14:04:34.718Z","updated_at":"2026-03-06T00:32:07.484Z","avatar_url":"https://github.com/treblereel.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![GitHub license](https://img.shields.io/github/license/treblereel/mapper-json)](https://github.com/treblereel/mapper-json/blob/main/LICENSE)\n![Sonatype Nexus (Releases)](https://img.shields.io/nexus/r/org.treblereel.gwt.json.mapper/processor?server=https%3A%2F%2Foss.sonatype.org\u0026style=plastic)\n![Gitter](https://img.shields.io/gitter/room/vertispan/j2cl)\n[![Java CI with Maven](https://github.com/treblereel/mapper-xml/actions/workflows/maven.yml/badge.svg)](https://github.com/treblereel/mapper-json/actions/workflows/maven.yml)\n\n# mapper-json\nmapper-json is an annotation-processor-based JSON-B (JSON Binding) like mapper that works both on the client side - GWT and J2CL - and on the JVM side with \"Code-first\" approach.\n\n## Get started\n\n1. Add relevant dependencies to your pom.xml\n\n```xml\n    \u003cdependency\u003e\n        \u003cgroupId\u003eorg.treblereel.gwt.json.mapper\u003c/groupId\u003e\n        \u003cartifactId\u003ecommon\u003c/artifactId\u003e\n        \u003cversion\u003e${project.version}\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003cdependency\u003e\n        \u003cgroupId\u003eorg.treblereel.gwt.json.mapper\u003c/groupId\u003e\n        \u003cartifactId\u003eprocessor\u003c/artifactId\u003e\n        \u003cversion\u003e${project.version}\u003c/version\u003e\n        \u003cscope\u003eprovided\u003c/scope\u003e\n    \u003c/dependency\u003e\n\n```\n2. In case you use GWT2, add the `inherits` directive to your `gwt.xml` file:\n\n```xml\n\u003cinherits name='org.treblereel.gwt.json.Mapper' /\u003e\n```\n\n3. Annotate POJOs with the @JSONMapper annotation:\n\n```xml\nimport org.treblereel.gwt.json.mapper.annotation.JSONMapper;\n    \n@JSONMapper\npublic class Person {\n    \n   private String firstName;\n   private String lastName;\n       \n   public String getFirstName() {\n      return firstName;\n   }\n       \n   public void setFirstName(String firstName) {\n      this.firstName = firstName;\n   }\n       \n   public String getLastName() {\n      return lastName;\n   }\n       \n   public void setLastName(String lastName) {\n       this.lastName = lastName;\n   }\n}\n```\n\nSetup is complete.\n\n## Using JSON mapper\n\nThe annotation processor will generate the JSON mapper for the `Person` class.\n\nExample of serializing `Person` to `JSON`:\n\n```java\nPerson_JsonMapperImpl mapper = new Person_JsonMapperImpl();\n\nPerson person = new Person();\nperson.setFirstName(\"John\");\nperson.setLastName(\"Doe\");\n\nString json = mapper.toJSON(person);\n// {\"firstName\":\"John\",\"lastName\":\"Doe\"}\n```\n\nExample of deserializing to POJO:\n\n```java\nPerson_JsonMapperImpl mapper = new Person_JsonMapperImpl();\n\nPerson person = mapper.fromJSON(\"{\\\"firstName\\\":\\\"John\\\",\\\"lastName\\\":\\\"Doe\\\"}\")\n```\n\n## Supported annotations and data types:\n\nSupported `JSON-B` annotations:\n\n* [@JsonbProperty](###@JsonbProperty)\n* [@JsonbTypeSerializer](###@JsonbTypeSerializer)\n* [@JsonbTypeDeserializer](###@JsonbTypeDeserializer)\n* [@JsonbTransient](###@JsonbTransient)\n* [@JsonbPropertyOrder](###@JsonbPropertyOrder)\n\n### @JsonbProperty\nAllows customization of field (or JavaBean property) name.This name is used either in serialization or in deserialization.\n* field\n\n```java\npublic class Person {\n    @JsonbProperty(\"_firstName\")\n    private String firstName;\n\n    @JsonbProperty(\"_lastName\")\n    private String lastName;\n}\n\n//{\"_firstName\":\"John\",\"_lastName\":\"Doe\"}\n```\n\n### @JsonbTypeSerializer\n### @JsonbTypeDeserializer\nAnnotation provides way how to set custom JsonbSerializer/JsonbDeserializer to field or JavaBean property.\n* field\n* type\n\n```java\n  @JsonbTypeSerializer(ObjectJsonbTypeSerializer.class)\n  @JsonbTypeDeserializer(ObjectJsonbTypeDeserializer.class)\n  private Object holder;\n```\n\nJsonbSerializer:\n```java\npublic class ObjectJsonbTypeSerializer implements JsonbSerializer\u003cObject\u003e {\n\n    Translation_JsonSerializerImpl translation_JsonSerializerImpl =\n            new Translation_JsonSerializerImpl();\n\n    @Override\n    public void serialize(Object obj, JsonGenerator generator, SerializationContext ctx) {\n        if (obj instanceof Boolean) {\n            generator.write(\"holder\", ((Boolean) obj));\n        } else if (obj instanceof Translation) {\n            translation_JsonSerializerImpl.serialize((Translation) obj, \"holder\", generator, ctx);\n        }\n    }\n}\n```\n\nJsonbDeserializer:\n```java\npublic class ObjectJsonbTypeDeserializer extends JsonbDeserializer\u003cObject\u003e {\n\n    Translation_JsonDeserializerImpl translation_JsonDeserializerImpl =\n            new Translation_JsonDeserializerImpl();\n\n    @Override\n    public Object deserialize(JsonValue value, DeserializationContext ctx) {\n\n        if (value.getValueType() != JsonValue.ValueType.NULL) {\n            if (value.getValueType() == JsonValue.ValueType.TRUE\n                    || value.getValueType() == JsonValue.ValueType.FALSE) {\n                if (value.getValueType() == JsonValue.ValueType.TRUE) {\n                    return true;\n                } else {\n                    return false;\n                }\n            } else if (value.getValueType() == JsonValue.ValueType.OBJECT) {\n                return translation_JsonDeserializerImpl.deserialize(value, ctx);\n            }\n        }\n        return null;\n    }\n}\n```\n\n### @JsonbTransient\nPrevents mapping of a Java Bean property, field or type to JSON representation.\n\n* field\n```java\n@JSONMapper\npublic class Person {\n\n    @JsonbTransient\n    private String firstName;\n\n    private String lastName;\n}\n//{\"lastName\":\"Doe\"}\n```\n\n### @JsonbPropertyOrder\nJsonbPropertyOrder allows us to specify the order of properties in the JSON representation of the class, which can be useful when working with systems that have strict ordering requirements.\n\n* type\n```java\n@JSONMapper\n@JsonbPropertyOrder({\"property3\", \"property2\", \"property1\"})\npublic class MyClass {\n    private String property1;\n    private String property2;\n    private String property3;\n    // getters and setters\n}\n//{\"property3\":\"value3\",\"property2\":\"value2\",\"property1\":\"value1\"}\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftreblereel%2Fmapper-json","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftreblereel%2Fmapper-json","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftreblereel%2Fmapper-json/lists"}