{"id":16149291,"url":"https://github.com/juliaaano/payload","last_synced_at":"2025-03-18T18:33:25.780Z","repository":{"id":19411676,"uuid":"85945054","full_name":"juliaaano/payload","owner":"juliaaano","description":"Easy conversion of HTTP payloads (e.g. JSON, XML) for Java.","archived":false,"fork":false,"pushed_at":"2024-02-14T16:05:19.000Z","size":129,"stargazers_count":11,"open_issues_count":3,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-10-11T00:38:18.724Z","etag":null,"topics":["easy-conversion","java","json","xml"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/juliaaano.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-03-23T12:04:31.000Z","updated_at":"2023-08-09T12:34:37.000Z","dependencies_parsed_at":"2022-09-05T17:10:43.672Z","dependency_job_id":null,"html_url":"https://github.com/juliaaano/payload","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliaaano%2Fpayload","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliaaano%2Fpayload/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliaaano%2Fpayload/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juliaaano%2Fpayload/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/juliaaano","download_url":"https://codeload.github.com/juliaaano/payload/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221715928,"owners_count":16868645,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["easy-conversion","java","json","xml"],"created_at":"2024-10-10T00:38:23.678Z","updated_at":"2024-10-27T18:15:22.971Z","avatar_url":"https://github.com/juliaaano.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Payload\n[![ci](https://github.com/juliaaano/payload/actions/workflows/ci-cd.yml/badge.svg)](https://github.com/juliaaano/payload/actions/workflows/ci-cd.yml)\n[![Release](https://img.shields.io/github/release/juliaaano/payload.svg)](https://github.com/juliaaano/payload/releases/latest)\n[![Maven Central](https://img.shields.io/maven-central/v/com.juliaaano/payload.svg)](https://maven-badges.herokuapp.com/maven-central/com.juliaaano/payload)\n[![Javadocs](http://www.javadoc.io/badge/com.juliaaano/payload.svg?color=blue)](http://www.javadoc.io/doc/com.juliaaano/payload)\n\nEasy conversion of HTTP payloads (JSON, XML, etc.) for Java.\n\nPayload acts as a Java-to-\\\u003cMediaTypeAsString\u003e facade or abstraction for various libraries such as Gson, Jackson, JAXB\nand more. The underlying library used is known as the Provider and it gets evaluated in runtime by classpath lookup.\n\nConceptually similar to what [SLF4J](https://www.slf4j.org/) does for logging.\n\n## How to use it\n\n```java\nimport static com.juliaaano.payload.MediaType.*;\n\nclass MyObject {\n  String value = \"abc\";\n  MyObject() {\n    // no-args constructor\n  }\n}\n\n/* Serialization */\n\nPayload\u003cMyObject\u003e jsonPayload = JSON.payload().newInstance(new MyObject());\nString json = jsonPayload.raw();\n// ==\u003e json is {\"value\":\"abc\"}\n\nPayload\u003cMyObject\u003e xmlPayload = XML.payload().newInstance(new MyObject());\nString xml = xmlPayload.raw();\n// ==\u003e xml is \u003cMyObject\u003e\u003cvalue\u003eabc\u003c/value\u003e\u003c/MyObject\u003e\n\n/* Deserialization */\n\nPayload\u003cMyObject\u003e payload_1 = JSON.payload().newInstance(json, MyObject.class);\nMyObject obj_1 = payload_1.get();\n\nPayload\u003cMyObject\u003e  payload_2 = XML.payload().newInstance(xml, MyObject.class);\nMyObject obj_2 = payload_2.get();\n```\n\n## Build and install\n\nPayload does not bring any transitive dependencies, however it is required to deliberately have at least one of the\npre defined providers in the classpath. You can also [implement your own](#custom-provider). \n\n#### Maven\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.juliaaano\u003c/groupId\u003e\n    \u003cartifactId\u003epayload\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.4\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nIn case you just need JSON conversion, add [Google Gson](https://github.com/google/gson) or any of the\nother JSON pre defined [providers](#providers).\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.google.code.gson\u003c/groupId\u003e\n    \u003cartifactId\u003egson\u003c/artifactId\u003e\n    \u003cversion\u003e${gson.version}\u003c/version\u003e\n    \u003cscope\u003eruntime\u003c/scope\u003e\n\u003c/dependency\u003e\n```\n\n### Providers\n\nThis library does not do any (de)serialization itself. It depends on finding in the classpath one of the\nfollowing:\n\n###### JSON\n\n* [Gson](https://github.com/google/gson)\n* [Jackson Databind](https://github.com/FasterXML/jackson-databind)\n* [Json Binding](http://json-b.net/)\n\n###### XML\n\n* [Jackson XML](https://github.com/FasterXML/jackson-dataformat-xml)\n* [JAXB](https://en.wikipedia.org/wiki/Java_Architecture_for_XML_Binding)\n\nIn case one or more are to be found, the priority is given by the order listed above.\n\n###### Priority\n\nIt is possible to determine the priority of which providers are loaded.\nFor example, if Gson and Jackson are present in the classpath, Payload can be configured to use Jackson instead of Gson\nby default.\n\nAll required is to include a file named payload.properties in the root of the classpath:\n\n```\njson.provider=JacksonJson\nxml.provider=JacksonXml\n``` \n\n###### Custom Provider\n\n1. Implement one of the available \\\u003cMediaType\u003eProviderFactory.java.\n2. Declare the full name of your implementation class in a file as per\n[java.util.ServiceLoader](https://docs.oracle.com/javase/tutorial/ext/basics/spi.html) specification\n*/META-INF/services/com.juliaaano.payload.json.\\\u003cMediaType\u003eProviderFactory*\n\n```java\npackage com.your.project;\npublic class MyProvider implements JsonProviderFactory {\n  @Override\n  public Optional\u003cProvider\u003e newInstance() {\n    return Optional.of(new Provider() {\n      @Override\n      public String serialize(Object object) {\n        return \"your way to serialize\";\n      }\n      @Override\n      public \u003cT\u003e T deserialize(String raw, Class\u003cT\u003e type) {\n        return null; // your way to deserialize\n      }\n    });\n  }\n}\n```\n\n```\n\u003e/META-INF/services/com.juliaaano.payload.json.JsonProviderFactory\ncom.your.project.MyProvider\n```   \n\n## Further Details\n\nRequires Java 8.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliaaano%2Fpayload","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuliaaano%2Fpayload","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliaaano%2Fpayload/lists"}