-
-
Notifications
You must be signed in to change notification settings - Fork 233
Closed
Description
(note: moved from FasterXML/jackson-module-jaxb-annotations#65 filed by @shahmalav )
Below is my POJO using builder pattern for Address.
@JsonDeserialize(builder = Address.AddressBuilder.class)
public final class Address {
private final String address1;
private final String city;
private final String stateProvince;
private final String postalCode;
private final Country country;
private final String county;
private Address(AddressBuilder addressbuilder) {
this.address1 = addressbuilder.address1;
this.city = addressbuilder.city;
this.stateProvince = addressbuilder.stateProvince;
this.postalCode = addressbuilder.postalCode;
this.country = addressbuilder.country;
this.county = addressbuilder.county;
}
public String getAddress1() {
return address1;
}
public String getCity() {
return city;
}
public String getStateProvince() {
return stateProvince;
}
public String getPostalCode() {
return postalCode;
}
public Country getCountry() {
return country;
}
public String getCounty() {
return county;
}
@JsonPOJOBuilder(withPrefix = "set")
public static class AddressBuilder {
@XmlElement(name = "Address1")
private final String address1;
@XmlElement(name = "City")
private final String city;
@XmlElement(name = "StateProvince")
private final String stateProvince;
@XmlElement(name = "PostalCode")
private final String postalCode;
@XmlElement(name = "Country")
private final Country country;
@XmlElement(name = "County")
private String county;
@JsonCreator
public AddressBuilder(@JsonProperty("address1") String address1, @JsonProperty("city") String city, @JsonProperty("stateProvince") String stateProvince,
@JsonProperty("postalCode") String postalCode, @JsonProperty("country") Country country) {
this.address1 = address1;
this.city = city;
this.stateProvince = stateProvince;
this.postalCode = postalCode;
this.country = country;
}
public AddressBuilder setCounty(String county) {
this.county = county;
return this;
}
public Address build() {
return new Address(this);
}
}
}
I can serialize and deserialize above class using JSON but when it comes to XML, it throws an exception.
Following is the stack trace:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Address1" (class com.wsgc.loyalty.service.model.Address$AddressBuilder), not marked as ignorable (8 known properties: "stateProvince", "country", "postalCode", "county", "city", "address1"])
at [Source: java.io.StringReader@351d0846; line: 10, column: 11] (through reference chain: x.y.z.model.Address$AddressBuilder["Address1"])
Here is the XML representation of Address:
<Address>
<Address1>111 Foo Bar</Address1>
<City>San Francisco</City>
<Country>USA</Country>
<County>San Francisco</County>
<StateProvince>CA</StateProvince>
<PostalCode>94132</PostalCode>
</Address>
This model may not be the best example of builder-pattern.
Metadata
Metadata
Assignees
Labels
No labels