gwt-jackson is a JSON parser for GWT. It uses Jackson 2.x annotations to customize the serialization/deserialization process.
Most of the Jackson 2.x annotations are supported. You can find an up-to-date list here. You can also find a lot of use cases in the tests.
Jackson 1.x annotations (org.codehaus.jackson.*
) are not supported.
Check the wiki for more informations.
The lib gets no updates anymore. So we update it for ourselves with new versions of Jackson locally:
- Checkout the branch
local-releases
- Update the property
jackson.version
to the needed version of Jackson (also update the version of all poms accordingly) - Execute
mvn clean install
and if successful, executemvn release:prepare
- Push changes to Github
- Execute
mvn release:perform
to deploy release to Nexus
Add <inherits name="com.github.nmorel.gwtjackson.GwtJackson" />
to your module descriptor XML file.
Then just create an interface extending ObjectReader
, ObjectWriter
or ObjectMapper
if you want to read JSON, write an object to JSON or both.
Here's an example without annotation :
public class TestEntryPoint implements EntryPoint {
public static interface PersonMapper extends ObjectMapper<Person> {}
public static class Person {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
@Override
public void onModuleLoad() {
PersonMapper mapper = GWT.create( PersonMapper.class );
String json = mapper.write( new Person( "John", "Doe" ) );
GWT.log( json ); // > {"firstName":"John","lastName":"Doe"}
Person person = mapper.read( json );
GWT.log( person.getFirstName() + " " + person.getLastName() ); // > John Doe
}
}
And if you want to make your class immutable for example, you can add some Jackson annotations :
public class TestEntryPoint implements EntryPoint {
public static interface PersonMapper extends ObjectMapper<Person> {}
public static class Person {
private final String firstName;
private final String lastName;
@JsonCreator
public Person( @JsonProperty( "firstName" ) String firstName,
@JsonProperty( "lastName" ) String lastName ) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
@Override
public void onModuleLoad() {
PersonMapper mapper = GWT.create( PersonMapper.class );
String json = mapper.write( new Person( "John", "Doe" ) );
GWT.log( json ); // > {"firstName":"John","lastName":"Doe"}
Person person = mapper.read( json );
GWT.log( person.getFirstName() + " " + person.getLastName() ); // > John Doe
}
}
<dependency>
<groupId>com.github.nmorel.gwtjackson</groupId>
<artifactId>gwt-jackson</artifactId>
<version>0.15.4</version>
<scope>provided</scope>
</dependency>
You can also get maven snapshots using the following repository :
<repository>
<id>oss-sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
In addition of gwt-jackson jar you can find here, you also need
- jackson-annotations-2.7.2.jar
- jackson-annotations-2.7.2-sources.jar for the GWT compilation only
- javapoet-1.0.0.jar for the GWT compilation only
If you need to communicate with your server using REST/Json payload, you can check these framework which integrates gwt-jackson :
- GWTP Rest Dispatch. Check the example.
- RestyGWT. Check the example.
- Requestor. Check the example.
- gwt-jackson-rest. Check the example.
- GWT RequestBuilder. Check the example.
Copyright 2014 Nicolas Morel under the Apache 2.0 license.