JsonProperty
isn\'t overriding the default name jackson gets from the getter. If I serialize the class below with ObjectMapper
and jackson I get
I had same proplem
You need just to replace import import com.fasterxml.jackson.annotation.JsonProperty; on import org.codehaus.jackson.annotate.JsonProperty; Its work.
I recently came across another interesting twist on this issue. We started using the Hibernate5Module to help with some lazy loading issues. Furthermore, we use Groovy so we are not defining getters and setters.
It turns out that the Hibernate Module seems to interfere with the @JsonProperty
annotation. Specifically if you have something annotated with @Transient
So, if you have something like:
@Transient
@ApiModelProperty(required = true)
@JsonProperty("alternateName")
String property
You won't see the alternateName
in the JSON. Furthermore, your clients will likely have trouble with their POSTs and PUTs! To fix this, you can use a simple workaround. Define the getters and setters for the internal name you need to use(*) and don't use the value
attribute on @JsonProperty
So this works:
@Transient
@ApiModelProperty(required = true)
@JsonProperty
String alternateName
void setProperty(String property) {
this.alternateName = property
}
@JsonIgnore
String getProperty() {
this.alternateName
}
Note the use of the @JsonIgnore
on the getter. If you don't, your framework will probably pick it up and you'll have duplicate entries for the same thing in your JSON.
Anyhow - I'm hoping this helps someone!
(*)We were trying to adhere to a particular interface, thus enforcing the name internally. However, the exposed API needed a different, user-friendly name.
I was missing databind dependency
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${fasterxml.version}</version>
</dependency>
I know its an old question but for me I got it working when I figured out that its conflicting with Gson library so I had to use @SerializedName("name")
instead of @JsonProperty("name")
hope this helps
The problem was that I was using both the old and new jackson libraries
i.e. before I had
import org.codehaus.jackson.annotate.JsonProperty;
Which I had to change to below, to be consistent with the library I was using.
Since I was using maven that also meant updating my maven dependencies.
import com.fasterxml.jackson.annotation.JsonProperty;
For it to work, I needed the @JsonProperty
annotation on the getter (putting it on the object didn't work)
I found the answer here (thanks to francescoforesti) @JsonProperty not working as expected
Camel cases still seem to have issues even after defining proper annotations. Example:
@JsonProperty("mirrorport") private String mirrorPort;
Deserialization still fails when xml has <mirrorport>YES</mirrorport>