I am using Jersey as JSR 311 implementation. The object i am trying to convert to JSON looks like this:
@XmlRootElement
public class deliveryTimes{
private Integer id;
private Short type;
private Integer orderId;
/* ... more fields and autogenerated Getters & Setters ... */
}
The JSON result is:
{"deliveryTimes":
[{"type":"1","orderId":"30449",/* ... other fields ... */ },
/* ... */
]}
In words: The field “id” is getting lost. In my other objects the id-fields have other names like orderId, customerId, … and these fields don’t get lost.
My pom.xml looks like this:
<!-- other stuff -->
<!-- JERSEY -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.11</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.11</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-grizzly2</artifactId>
<version>1.11</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.11</version>
</dependency>
<!-- Jersey + Spring -->
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<version>1.11</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- other stuff -->
There’s no further configuration.
I didn’t find anything helpful on the jersey website or via google, so I ended up here with my first post ever.
Is there any config option I am missing? How do you JSONify id-fields?
There are a number of reasons why the
idmay not be marshalled.1 – It has a null value
By default JAXB implementations will not marshal out null values. If you wish to marshal out a null value be sure to add the following annotation
For More Information See:
2 – There is a field but not no accessor (get/set) methods
By default JAXB only maps public fields and accessors. Anything not matching this criteria is considered unmapped. You can solve this issue by specifying
XmlAccessorType(XmlAccessType.FIELD)or by annotating the field
For More Information See:
3 – There is a get method but no set method
If there is a get method but no accompanying set method then your JAXB implementation will treat it as an unmapped property. To fix this you simply need to map the get method with
@XmlElement.