Skip to content

Commit f078d6f

Browse files
committed
#32 - Non public field org.example.customer.IgnoreField middleName with no matching setter or constructor?
1 parent 595f6f1 commit f078d6f

File tree

4 files changed

+82
-5
lines changed

4 files changed

+82
-5
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.example.customer;
2+
3+
import io.avaje.jsonb.Json;
4+
5+
@Json
6+
public class IgnoreField {
7+
8+
private String firstName;
9+
10+
@Json.Ignore
11+
private String middleName;
12+
13+
private String lastName;
14+
15+
public IgnoreField() {
16+
}
17+
18+
public IgnoreField(String firstName, String middleName) {
19+
this.firstName = firstName;
20+
this.middleName = middleName;
21+
}
22+
23+
public String getFirstName() {
24+
return firstName;
25+
}
26+
27+
public IgnoreField setFirstName(String firstName) {
28+
this.firstName = firstName;
29+
return this;
30+
}
31+
32+
public String getMiddleName() {
33+
return middleName;
34+
}
35+
36+
public String getLastName() {
37+
return lastName;
38+
}
39+
40+
public IgnoreField setLastName(String lastName) {
41+
this.lastName = lastName;
42+
return this;
43+
}
44+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.example.customer;
2+
3+
import io.avaje.jsonb.Jsonb;
4+
import org.junit.jupiter.api.Test;
5+
6+
import static org.assertj.core.api.Assertions.assertThat;
7+
8+
class IgnoreFieldTest {
9+
10+
Jsonb jsonb = Jsonb.builder().build();
11+
12+
@Test
13+
void toJsonFromJson() {
14+
var bean = new IgnoreField("fn", "mn");
15+
bean.setLastName("ln");
16+
17+
String asJson = jsonb.toJson(bean);
18+
assertThat(asJson).isEqualTo("{\"firstName\":\"fn\",\"lastName\":\"ln\"}");
19+
20+
IgnoreField fromJson = jsonb.type(IgnoreField.class).fromJson(asJson);
21+
assertThat(fromJson.getFirstName()).isEqualTo("fn");
22+
assertThat(fromJson.getLastName()).isEqualTo("ln");
23+
assertThat(fromJson.getMiddleName()).isNull();
24+
}
25+
}

jsonb-generator/src/main/java/io/avaje/jsonb/generator/FieldReader.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ boolean includeFromJson() {
100100
return deserialize;
101101
}
102102

103+
boolean includeToJson() {
104+
return serialize;
105+
}
106+
103107
boolean includeToJson(String type) {
104108
return serialize && (type == null || subTypes.containsKey(type));
105109
}

jsonb-generator/src/main/java/io/avaje/jsonb/generator/TypeReader.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,12 @@ private void readMethod(Element element, TypeElement type) {
130130

131131
private void matchFieldsToSetterOrConstructor() {
132132
for (FieldReader field : allFields) {
133-
if (constructorParamMap.get(field.fieldName()) != null) {
134-
field.constructorParam();
135-
} else {
136-
matchFieldToSetter(field);
133+
if (field.includeFromJson()) {
134+
if (constructorParamMap.get(field.fieldName()) != null) {
135+
field.constructorParam();
136+
} else {
137+
matchFieldToSetter(field);
138+
}
137139
}
138140
}
139141
}
@@ -189,7 +191,9 @@ private MethodReader setterLookup(String name, boolean loose) {
189191

190192
private void matchFieldsToGetter() {
191193
for (FieldReader field : allFields) {
192-
matchFieldToGetter(field);
194+
if (field.includeToJson()) {
195+
matchFieldToGetter(field);
196+
}
193197
}
194198
}
195199

0 commit comments

Comments
 (0)