BAEL-3326, "Optimizing JSON Schema for production use":

Optimized imports and formatted source.
This commit is contained in:
Karsten Silz 2020-09-05 18:48:35 +01:00
parent a7dc3199ad
commit fb4041073b
7 changed files with 82 additions and 65 deletions

View File

@ -116,7 +116,7 @@ public class Customer {
public static Customer[] fromMockFile() throws IOException { public static Customer[] fromMockFile() throws IOException {
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
InputStream jsonFile = new FileInputStream("src/test/resources/json_optimization_mock_data.json"); InputStream jsonFile = new FileInputStream("src/test/resources/json_optimization_mock_data.json");
Customer[] feedback = objectMapper.readValue(jsonFile, Customer[].class); Customer[] feedback = objectMapper.readValue(jsonFile, Customer[].class);
return feedback; return feedback;
} }

View File

@ -2,39 +2,43 @@ package com.baeldung.jsonoptimization;
import java.io.IOException; import java.io.IOException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.ObjectCodec; import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
public class CustomerDeserializer extends StdDeserializer<Customer> { public class CustomerDeserializer extends StdDeserializer<Customer> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public CustomerDeserializer() { public CustomerDeserializer() {
this(null); this(null);
} }
public CustomerDeserializer(Class<Customer> t) { public CustomerDeserializer(Class<Customer> t) {
super(t); super(t);
} }
@Override @Override
public Customer deserialize(JsonParser parser, DeserializationContext deserializer) throws IOException { public Customer deserialize(JsonParser parser, DeserializationContext deserializer) throws IOException {
Customer feedback = new Customer(); Customer feedback = new Customer();
ObjectCodec codec = parser.getCodec(); ObjectCodec codec = parser.getCodec();
JsonNode node = codec.readTree(parser); JsonNode node = codec.readTree(parser);
feedback.setId(node.get(0).asLong()); feedback.setId(node.get(0)
feedback.setFirstName(node.get(1).asText()); .asLong());
feedback.setLastName(node.get(2).asText()); feedback.setFirstName(node.get(1)
feedback.setStreet(node.get(3).asText()); .asText());
feedback.setPostalCode(node.get(4).asText()); feedback.setLastName(node.get(2)
feedback.setCity(node.get(5).asText()); .asText());
feedback.setState(node.get(6).asText()); feedback.setStreet(node.get(3)
.asText());
feedback.setPostalCode(node.get(4)
.asText());
feedback.setCity(node.get(5)
.asText());
feedback.setState(node.get(6)
.asText());
JsonNode phoneNumber = node.get(7); JsonNode phoneNumber = node.get(7);
feedback.setPhoneNumber(phoneNumber.isNull() ? null : phoneNumber.asText()); feedback.setPhoneNumber(phoneNumber.isNull() ? null : phoneNumber.asText());
JsonNode email = node.get(8); JsonNode email = node.get(8);

View File

@ -4,19 +4,19 @@ import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL) @JsonInclude(JsonInclude.Include.NON_NULL)
public class CustomerNoNull extends Customer { public class CustomerNoNull extends Customer {
@Override @Override
public String toString() { public String toString() {
return "CustomerNoNull [toString()=" + super.toString() + "]"; return "CustomerNoNull [toString()=" + super.toString() + "]";
} }
public static CustomerNoNull[] fromCustomers(Customer[] customers) { public static CustomerNoNull[] fromCustomers(Customer[] customers) {
CustomerNoNull[] feedback = new CustomerNoNull[customers.length]; CustomerNoNull[] feedback = new CustomerNoNull[customers.length];
for(int i = 0; i < customers.length; i++) { for (int i = 0; i < customers.length; i++) {
Customer aCustomer = customers[i]; Customer aCustomer = customers[i];
CustomerNoNull newOne = new CustomerNoNull(); CustomerNoNull newOne = new CustomerNoNull();
newOne.setId(aCustomer.getId()); newOne.setId(aCustomer.getId());
newOne.setFirstName(aCustomer.getFirstName()); newOne.setFirstName(aCustomer.getFirstName());
newOne.setLastName(aCustomer.getLastName()); newOne.setLastName(aCustomer.getLastName());
@ -26,11 +26,11 @@ public class CustomerNoNull extends Customer {
newOne.setState(aCustomer.getState()); newOne.setState(aCustomer.getState());
newOne.setPhoneNumber(aCustomer.getPhoneNumber()); newOne.setPhoneNumber(aCustomer.getPhoneNumber());
newOne.setEmail(aCustomer.getEmail()); newOne.setEmail(aCustomer.getEmail());
feedback[i] = newOne; feedback[i] = newOne;
} }
return feedback; return feedback;
} }
} }

View File

@ -6,21 +6,21 @@ import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer; import com.fasterxml.jackson.databind.ser.std.StdSerializer;
public class CustomerSerializer extends StdSerializer<Customer> { public class CustomerSerializer extends StdSerializer<Customer> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public CustomerSerializer() { public CustomerSerializer() {
this(null); this(null);
} }
public CustomerSerializer(Class<Customer> t) { public CustomerSerializer(Class<Customer> t) {
super(t); super(t);
} }
@Override @Override
public void serialize(Customer customer, JsonGenerator jsonGenerator, SerializerProvider serializer) throws IOException { public void serialize(Customer customer, JsonGenerator jsonGenerator, SerializerProvider serializer) throws IOException {
jsonGenerator.writeStartArray(); jsonGenerator.writeStartArray();
jsonGenerator.writeNumber(customer.getId()); jsonGenerator.writeNumber(customer.getId());
jsonGenerator.writeString(customer.getFirstName()); jsonGenerator.writeString(customer.getFirstName());
jsonGenerator.writeString(customer.getLastName()); jsonGenerator.writeString(customer.getLastName());
jsonGenerator.writeString(customer.getStreet()); jsonGenerator.writeString(customer.getStreet());

View File

@ -2,97 +2,113 @@ package com.baeldung.jsonoptimization;
import java.util.Objects; import java.util.Objects;
import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
public class CustomerShortNames { public class CustomerShortNames {
private long id; private long id;
@JsonProperty("f") @JsonProperty("f")
private String firstName; private String firstName;
@JsonProperty("l") @JsonProperty("l")
private String lastName; private String lastName;
@JsonProperty("s") @JsonProperty("s")
private String street; private String street;
@JsonProperty("p") @JsonProperty("p")
private String postalCode; private String postalCode;
@JsonProperty("c") @JsonProperty("c")
private String city; private String city;
@JsonProperty("a") @JsonProperty("a")
private String state; private String state;
@JsonProperty("o") @JsonProperty("o")
private String phoneNumber; private String phoneNumber;
@JsonProperty("e") @JsonProperty("e")
private String email; private String email;
public long getId() { public long getId() {
return id; return id;
} }
public void setId(long id) { public void setId(long id) {
this.id = id; this.id = id;
} }
public String getFirstName() { public String getFirstName() {
return firstName; return firstName;
} }
public void setFirstName(String firstName) { public void setFirstName(String firstName) {
this.firstName = firstName; this.firstName = firstName;
} }
public String getLastName() { public String getLastName() {
return lastName; return lastName;
} }
public void setLastName(String lastName) { public void setLastName(String lastName) {
this.lastName = lastName; this.lastName = lastName;
} }
public String getStreet() { public String getStreet() {
return street; return street;
} }
public void setStreet(String street) { public void setStreet(String street) {
this.street = street; this.street = street;
} }
public String getPostalCode() { public String getPostalCode() {
return postalCode; return postalCode;
} }
public void setPostalCode(String postalCode) { public void setPostalCode(String postalCode) {
this.postalCode = postalCode; this.postalCode = postalCode;
} }
public String getCity() { public String getCity() {
return city; return city;
} }
public void setCity(String city) { public void setCity(String city) {
this.city = city; this.city = city;
} }
public String getState() { public String getState() {
return state; return state;
} }
public void setState(String state) { public void setState(String state) {
this.state = state; this.state = state;
} }
public String getPhoneNumber() { public String getPhoneNumber() {
return phoneNumber; return phoneNumber;
} }
public void setPhoneNumber(String phoneNumber) { public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber; this.phoneNumber = phoneNumber;
} }
public String getEmail() { public String getEmail() {
return email; return email;
} }
public void setEmail(String email) { public void setEmail(String email) {
this.email = email; this.email = email;
} }
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(city, email, firstName, id, lastName, phoneNumber, postalCode, state, street); return Objects.hash(city, email, firstName, id, lastName, phoneNumber, postalCode, state, street);
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (this == obj) { if (this == obj) {
@ -105,20 +121,20 @@ public class CustomerShortNames {
return Objects.equals(city, other.city) && Objects.equals(email, other.email) && Objects.equals(firstName, other.firstName) && id == other.id && Objects.equals(lastName, other.lastName) && Objects.equals(phoneNumber, other.phoneNumber) return Objects.equals(city, other.city) && Objects.equals(email, other.email) && Objects.equals(firstName, other.firstName) && id == other.id && Objects.equals(lastName, other.lastName) && Objects.equals(phoneNumber, other.phoneNumber)
&& Objects.equals(postalCode, other.postalCode) && Objects.equals(state, other.state) && Objects.equals(street, other.street); && Objects.equals(postalCode, other.postalCode) && Objects.equals(state, other.state) && Objects.equals(street, other.street);
} }
@Override @Override
public String toString() { public String toString() {
return "CustomerWithShorterAttributes [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", street=" + street + ", postalCode=" + postalCode + ", city=" + city + ", state=" + state + ", phoneNumber=" + phoneNumber + ", email=" + email return "CustomerWithShorterAttributes [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", street=" + street + ", postalCode=" + postalCode + ", city=" + city + ", state=" + state + ", phoneNumber=" + phoneNumber + ", email=" + email
+ "]"; + "]";
} }
public static CustomerShortNames[] fromCustomers(Customer[] customers) { public static CustomerShortNames[] fromCustomers(Customer[] customers) {
CustomerShortNames[] feedback = new CustomerShortNames[customers.length]; CustomerShortNames[] feedback = new CustomerShortNames[customers.length];
for(int i = 0; i < customers.length; i++) { for (int i = 0; i < customers.length; i++) {
Customer aCustomer = customers[i]; Customer aCustomer = customers[i];
CustomerShortNames newOne = new CustomerShortNames(); CustomerShortNames newOne = new CustomerShortNames();
newOne.setId(aCustomer.getId()); newOne.setId(aCustomer.getId());
newOne.setFirstName(aCustomer.getFirstName()); newOne.setFirstName(aCustomer.getFirstName());
newOne.setLastName(aCustomer.getLastName()); newOne.setLastName(aCustomer.getLastName());
@ -128,11 +144,11 @@ public class CustomerShortNames {
newOne.setState(aCustomer.getState()); newOne.setState(aCustomer.getState());
newOne.setPhoneNumber(aCustomer.getPhoneNumber()); newOne.setPhoneNumber(aCustomer.getPhoneNumber());
newOne.setEmail(aCustomer.getEmail()); newOne.setEmail(aCustomer.getEmail());
feedback[i] = newOne; feedback[i] = newOne;
} }
return feedback; return feedback;
} }
} }

View File

@ -1,24 +1,22 @@
package com.baeldung.jsonoptimization; package com.baeldung.jsonoptimization;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonInclude(JsonInclude.Include.NON_NULL) @JsonInclude(JsonInclude.Include.NON_NULL)
public class CustomerShortNamesNoNull extends CustomerShortNames { public class CustomerShortNamesNoNull extends CustomerShortNames {
@Override @Override
public String toString() { public String toString() {
return "CustomerShortNamesNoNull [toString()=" + super.toString() + "]"; return "CustomerShortNamesNoNull [toString()=" + super.toString() + "]";
} }
public static CustomerShortNamesNoNull[] fromCustomers(Customer[] customers) { public static CustomerShortNamesNoNull[] fromCustomers(Customer[] customers) {
CustomerShortNamesNoNull[] feedback = new CustomerShortNamesNoNull[customers.length]; CustomerShortNamesNoNull[] feedback = new CustomerShortNamesNoNull[customers.length];
for(int i = 0; i < customers.length; i++) { for (int i = 0; i < customers.length; i++) {
Customer aCustomer = customers[i]; Customer aCustomer = customers[i];
CustomerShortNamesNoNull newOne = new CustomerShortNamesNoNull(); CustomerShortNamesNoNull newOne = new CustomerShortNamesNoNull();
newOne.setId(aCustomer.getId()); newOne.setId(aCustomer.getId());
newOne.setFirstName(aCustomer.getFirstName()); newOne.setFirstName(aCustomer.getFirstName());
newOne.setLastName(aCustomer.getLastName()); newOne.setLastName(aCustomer.getLastName());
@ -28,10 +26,10 @@ public class CustomerShortNamesNoNull extends CustomerShortNames {
newOne.setState(aCustomer.getState()); newOne.setState(aCustomer.getState());
newOne.setPhoneNumber(aCustomer.getPhoneNumber()); newOne.setPhoneNumber(aCustomer.getPhoneNumber());
newOne.setEmail(aCustomer.getEmail()); newOne.setEmail(aCustomer.getEmail());
feedback[i] = newOne; feedback[i] = newOne;
} }
return feedback; return feedback;
} }

View File

@ -54,21 +54,20 @@ public class CustomerSlim {
} }
public static CustomerSlim[] fromCustomers(Customer[] customers) { public static CustomerSlim[] fromCustomers(Customer[] customers) {
CustomerSlim[] feedback = new CustomerSlim[customers.length]; CustomerSlim[] feedback = new CustomerSlim[customers.length];
for(int i = 0; i < customers.length; i++) { for (int i = 0; i < customers.length; i++) {
Customer aCustomer = customers[i]; Customer aCustomer = customers[i];
CustomerSlim newOne = new CustomerSlim(); CustomerSlim newOne = new CustomerSlim();
newOne.setId(aCustomer.getId()); newOne.setId(aCustomer.getId());
newOne.setName(aCustomer.getFirstName() + " " + aCustomer.getLastName()); newOne.setName(aCustomer.getFirstName() + " " + aCustomer.getLastName());
newOne.setAddress(aCustomer.getStreet() + ", " + aCustomer.getCity() + " " + aCustomer.getState() + " " + aCustomer.getPostalCode()); newOne.setAddress(aCustomer.getStreet() + ", " + aCustomer.getCity() + " " + aCustomer.getState() + " " + aCustomer.getPostalCode());
feedback[i] = newOne; feedback[i] = newOne;
} }
return feedback; return feedback;
} }
} }