Skip to content

Commit f388830

Browse files
committed
Remaining commits
1 parent c831f7d commit f388830

File tree

6 files changed

+175
-13
lines changed

6 files changed

+175
-13
lines changed

spring-boot/jackson-jsonview/UserApplication/src/main/java/com/reflectoring/userdetails/model/UserData.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class UserData {
3030
@JsonView(value = {Views.GetView.class, Views.PatchView.class, Views.UserSummary.class, Views.ExternalView.class})
3131
private String city;
3232

33-
private boolean isInternalUser;
33+
private boolean internalUser;
3434

3535
private String additionalData;
3636

@@ -112,11 +112,11 @@ public void setCity(String city) {
112112

113113
@JsonIgnore
114114
public boolean isInternalUser() {
115-
return isInternalUser;
115+
return internalUser;
116116
}
117117

118118
public void setInternalUser(boolean internalUser) {
119-
isInternalUser = internalUser;
119+
internalUser = internalUser;
120120
}
121121

122122
public String getLoginId() {
@@ -193,7 +193,7 @@ public String toString() {
193193
", address='" + address + '\'' +
194194
", suburb='" + suburb + '\'' +
195195
", city='" + city + '\'' +
196-
", isInternalUser=" + isInternalUser +
196+
", internalUser=" + internalUser +
197197
", loginId='" + loginId + '\'' +
198198
", loginPassword='" + loginPassword + '\'' +
199199
", ssnNumber='" + ssnNumber + '\'' +

spring-boot/jackson-jsonview/UserApplication/src/main/java/com/reflectoring/userdetails/service/CommonBean.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@
66
import com.fasterxml.jackson.databind.SerializationFeature;
77
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
88
import org.springframework.context.annotation.Bean;
9+
import org.springframework.context.annotation.Configuration;
910
import org.springframework.stereotype.Service;
1011

11-
@Service
12+
@Configuration
1213
public class CommonBean {
1314

1415
@Bean
@@ -17,8 +18,8 @@ public ObjectMapper objectMapper() {
1718
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
1819
mapper.registerModule(new JavaTimeModule());
1920
//mapper.disable(MapperFeature.DEFAULT_VIEW_INCLUSION);
20-
mapper.getSerializationConfig().without(MapperFeature.DEFAULT_VIEW_INCLUSION);
21-
mapper.getDeserializationConfig().without(MapperFeature.DEFAULT_VIEW_INCLUSION);
21+
//mapper.getSerializationConfig().without(MapperFeature.DEFAULT_VIEW_INCLUSION);
22+
//mapper.getDeserializationConfig().without(MapperFeature.DEFAULT_VIEW_INCLUSION);
2223
return mapper;
2324
}
2425
}

spring-boot/jackson-jsonview/UserApplication/src/main/java/com/reflectoring/userdetails/web/InternalUserController.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public InternalUserController(UserService userService) {
2626
}
2727

2828
@GetMapping("/users")
29-
@JsonView(Views.GetView.class)
29+
@JsonView(Views.InternalView.class)
3030
public ResponseEntity<List<UserData>> getAllUsers(@RequestParam(required = false) String loginId) {
3131
if (Objects.isNull(loginId)) {
3232
return ResponseEntity.ok().body(userService.getAllUsers(true));
@@ -48,11 +48,10 @@ public ResponseEntity<UserData> getUserSummary(@RequestParam String loginId) {
4848
return ResponseEntity.ok().body(userService.getUser(loginId));
4949
}
5050

51+
5152
@PatchMapping("/users")
5253
public ResponseEntity<UserData> updateAddress(@RequestParam String loginId,
5354
@RequestBody @JsonView(Views.PatchView.class) UserData addressData) {
5455
return ResponseEntity.ok().body(userService.updateAddress(loginId, addressData));
5556
}
56-
57-
58-
}
57+
}

spring-boot/jackson-jsonview/UserApplication/src/test/java/com/reflectoring/JacksonAutoConfigTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ public void defaultObjectMapperBuilder() throws Exception {
4343
assertTrue(MapperFeature.DEFAULT_VIEW_INCLUSION.enabledByDefault());
4444
assertFalse(mapper.getDeserializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
4545
assertFalse(mapper.getSerializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
46-
assertTrue(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES.enabledByDefault());
47-
assertFalse(mapper.getDeserializationConfig().isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES));
4846

4947
SerializationConfig serConfig = mapper.getSerializationConfig();
5048
assertFalse(serConfig.isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION));
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
package com.reflectoring;
2+
3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.MapperFeature;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
6+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
7+
import com.reflectoring.userdetails.model.UserData;
8+
import com.reflectoring.userdetails.persistence.Views;
9+
import com.reflectoring.util.MockedUsersUtility;
10+
import org.hamcrest.beans.PropertyUtil;
11+
import org.junit.Test;
12+
import org.springframework.boot.test.context.SpringBootTest;
13+
14+
import java.beans.PropertyDescriptor;
15+
import java.util.Arrays;
16+
import java.util.List;
17+
import java.util.Objects;
18+
19+
import static org.junit.jupiter.api.Assertions.assertFalse;
20+
import static org.junit.jupiter.api.Assertions.assertTrue;
21+
22+
@SpringBootTest
23+
public class JsonViewTest {
24+
25+
@Test
26+
public void serializeUserSummaryViewTest() throws JsonProcessingException {
27+
final UserData mockedUser = MockedUsersUtility.getMockedUserData();
28+
29+
// DEFAULT_VIEW_INCLUSION is disabled - Fields not annotated with @JsonView are not present
30+
final ObjectMapper objectMapper = new ObjectMapper();
31+
objectMapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
32+
final String serializedValue = objectMapper
33+
.writerWithView(Views.UserSummary.class)
34+
.writeValueAsString(mockedUser);
35+
36+
final List<String> expectedFields = Arrays.asList("createdBy", "createdDate", "updatedBy", "updatedDate",
37+
"additionalData", "loginId", "loginPassword", "ssnNumber");
38+
expectedFields.stream().forEach(field -> {
39+
assertFalse(serializedValue.contains(field));
40+
});
41+
42+
// DEFAULT_VIEW_INCLUSION is enabled - Fields not annotated with @JsonView are present
43+
final ObjectMapper objectMapper1 = new ObjectMapper();
44+
objectMapper1.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);
45+
final String serializedValue1 = objectMapper1
46+
.writerWithView(Views.UserSummary.class)
47+
.writeValueAsString(mockedUser);
48+
System.out.println(serializedValue1);
49+
50+
assertTrue(serializedValue1.contains("additionalData"));
51+
}
52+
53+
@Test
54+
public void serializeUserDetailedSummaryViewTest() throws JsonProcessingException {
55+
final UserData mockedUser = MockedUsersUtility.getMockedUserData();
56+
57+
// DEFAULT_VIEW_INCLUSION is disabled - Fields not annotated with @JsonView are not present
58+
final ObjectMapper objectMapper = new ObjectMapper();
59+
objectMapper.registerModule(new JavaTimeModule());
60+
objectMapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
61+
final String serializedValue = objectMapper
62+
.writerWithView(Views.UserDetailedSummary.class)
63+
.writeValueAsString(mockedUser);
64+
65+
final List<String> expectedFields = Arrays.asList("createdBy", "createdDate", "updatedBy", "updatedDate");
66+
expectedFields.stream().forEach(field -> {
67+
assertTrue(serializedValue.contains(field));
68+
});
69+
70+
final List<String> moreFields = Arrays.asList("loginId", "loginPassword", "ssnNumber");
71+
moreFields.stream().forEach(field -> {
72+
assertFalse(serializedValue.contains(field));
73+
});
74+
75+
// DEFAULT_VIEW_INCLUSION is enabled - Fields not annotated with @JsonView are present
76+
final ObjectMapper objectMapper1 = new ObjectMapper();
77+
objectMapper1.registerModule(new JavaTimeModule());
78+
objectMapper1.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);
79+
final String serializedValue1 = objectMapper1
80+
.writerWithView(Views.UserDetailedSummary.class)
81+
.writeValueAsString(mockedUser);
82+
System.out.println(serializedValue1);
83+
84+
assertTrue(serializedValue1.contains("additionalData"));
85+
}
86+
87+
@Test
88+
public void deserializeUserSummaryViewTest() throws JsonProcessingException {
89+
// DEFAULT_VIEW_INCLUSION is disabled - Fields not annotated with @JsonView are not present
90+
// Deserializes only the fields present in the view
91+
final ObjectMapper objectMapper = new ObjectMapper();
92+
objectMapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
93+
final UserData deserializedValue = objectMapper
94+
.readerWithView(Views.UserSummary.class)
95+
.forType(UserData.class)
96+
.readValue(MockedUsersUtility.userDataObjectAsString());
97+
98+
System.out.println("Deserialize with DEFAULT_VIEW_INCLUSION as false :" + deserializedValue);
99+
100+
assertTrue(Objects.isNull(deserializedValue.getCreatedBy()));
101+
assertTrue(Objects.isNull(deserializedValue.getCreatedDate()));
102+
assertTrue(Objects.isNull(deserializedValue.getUpdatedBy()));
103+
assertTrue(Objects.isNull(deserializedValue.getUpdatedDate()));
104+
assertTrue(Objects.isNull(deserializedValue.getAdditionalData()));
105+
106+
}
107+
108+
@Test
109+
public void deserializeUserDetailedSummaryViewTest() throws JsonProcessingException {
110+
// DEFAULT_VIEW_INCLUSION is disabled - Fields not annotated with @JsonView are not present
111+
// Deserializes only the fields present in the view
112+
final ObjectMapper objectMapper = new ObjectMapper();
113+
objectMapper.registerModule(new JavaTimeModule());
114+
objectMapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
115+
final UserData deserializedValue = objectMapper
116+
.readerWithView(Views.UserDetailedSummary.class)
117+
.forType(UserData.class)
118+
.readValue(MockedUsersUtility.userDataObjectAsString());
119+
120+
assertFalse(Objects.isNull(deserializedValue.getCreatedBy()));
121+
assertFalse(Objects.isNull(deserializedValue.getCreatedDate()));
122+
assertFalse(Objects.isNull(deserializedValue.getUpdatedBy()));
123+
assertFalse(Objects.isNull(deserializedValue.getUpdatedDate()));
124+
}
125+
126+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.reflectoring.util;
2+
3+
import com.reflectoring.userdetails.CommonUtil;
4+
import com.reflectoring.userdetails.model.UserData;
5+
6+
import java.nio.charset.StandardCharsets;
7+
import java.time.Month;
8+
import java.time.format.DateTimeFormatter;
9+
import java.util.Base64;
10+
11+
public class MockedUsersUtility {
12+
13+
public static UserData getMockedUserData() {
14+
UserData mockedUser = new UserData();
15+
mockedUser.setAddress("11 Landmark Street, Riverstone");
16+
mockedUser.setCity("Sydney");
17+
mockedUser.setDob(CommonUtil.convertToDate(1980, Month.MARCH, 2)
18+
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
19+
mockedUser.setSuburb("Riverstone");
20+
mockedUser.setInternalUser(true);
21+
mockedUser.setCreatedBy("USER100");
22+
mockedUser.setCreatedDate(CommonUtil.convertToDate(2023, Month.MARCH, 24));
23+
mockedUser.setUpdatedBy("USER200");
24+
mockedUser.setUpdatedDate(CommonUtil.convertToDate(2023, Month.MARCH, 25));
25+
mockedUser.setFirstName("Rob");
26+
mockedUser.setLastName("Paulman");
27+
mockedUser.setLoginId("ROB1908b56");
28+
mockedUser.setLoginPassword(Base64.getEncoder().encodeToString(
29+
"LemonMeringue@2023".getBytes(StandardCharsets.UTF_8)));
30+
mockedUser.setSsnNumber("OVA7890WXFY");
31+
32+
return mockedUser;
33+
}
34+
35+
public static String userDataObjectAsString() {
36+
return "{\"id\":0,\"firstName\":\"Rob\",\"lastName\":\"Paulman\",\"dob\":\"1980-03-02\",\"address\":\"11 Landmark Street, Riverstone\",\"suburb\":\"Riverstone\",\"city\":\"Sydney\",\"additionalData\":null,\"loginId\":\"ROB1908b56\",\"loginPassword\":\"afgr5thrf\",\"createdBy\":\"USER100\",\"createdDate\":[2023,3,24],\"updatedBy\":\"USER200\",\"updatedDate\":[2023,3,25]}\n";
37+
}
38+
}

0 commit comments

Comments
 (0)