Skip to content

Commit 184dd38

Browse files
committed
Fix Deserialize Java Json Notification
1 parent 541b0eb commit 184dd38

File tree

5 files changed

+58
-8
lines changed

5 files changed

+58
-8
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.codecampus.notification.configuration.config;
2+
3+
import com.fasterxml.jackson.databind.DeserializationFeature;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.fasterxml.jackson.databind.SerializationFeature;
6+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
7+
import org.springframework.context.annotation.Bean;
8+
import org.springframework.context.annotation.Configuration;
9+
import org.springframework.context.annotation.Primary;
10+
11+
@Configuration
12+
public class JacksonConfig {
13+
14+
@Bean
15+
@Primary
16+
public ObjectMapper objectMapper() {
17+
ObjectMapper mapper = new ObjectMapper();
18+
mapper.registerModule(new JavaTimeModule());
19+
// serialize Instant/LocalDateTime theo ISO-8601 thay vì epoch timestamp
20+
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
21+
// không tự ý đổi timezone khi parse
22+
mapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
23+
return mapper;
24+
}
25+
}

notification-service/src/main/java/com/codecampus/notification/repository/client/IdentityClient.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.codecampus.notification.repository.client;
22

3-
import com.codecampus.notification.configuration.feign.AuthenticationRequestInterceptor;
43
import com.codecampus.notification.configuration.feign.FeignConfigForm;
54
import com.codecampus.notification.dto.common.ApiResponse;
65
import com.codecampus.notification.dto.request.IntrospectRequest;
@@ -13,8 +12,7 @@
1312
name = "identity-client",
1413
url = "${app.services.identity}",
1514
path = "/auth",
16-
configuration = {AuthenticationRequestInterceptor.class,
17-
FeignConfigForm.class}
15+
configuration = FeignConfigForm.class
1816
)
1917
public interface IdentityClient {
2018
@PostMapping(

notification-service/src/main/java/com/codecampus/notification/service/NotificationStatusService.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.codecampus.notification.repository.NotificationRepository;
55
import com.mongodb.client.result.UpdateResult;
66
import java.time.Instant;
7+
import java.util.Map;
78
import java.util.Set;
89
import lombok.AccessLevel;
910
import lombok.RequiredArgsConstructor;
@@ -44,10 +45,10 @@ public long markRead(
4445

4546
// push realtime để UI cập nhật
4647
socketPushService.pushToUserEvent(recipient, "notification-status",
47-
java.util.Map.of(
48+
Map.of(
4849
"action", "READ",
4950
"ids", ids,
50-
"at", ts
51+
"at", ts.toEpochMilli()
5152
)
5253
);
5354

@@ -72,7 +73,7 @@ public long markUnread(String recipient, Set<String> ids) {
7273
mongoTemplate.updateMulti(q, u, NotificationDocument.class);
7374

7475
socketPushService.pushToUserEvent(recipient, "notification-status",
75-
java.util.Map.of(
76+
Map.of(
7677
"action", "UNREAD",
7778
"ids", ids
7879
)
@@ -100,7 +101,7 @@ public long markAllRead(String recipient, Instant before, Instant at) {
100101
mongoTemplate.updateMulti(q, u, NotificationDocument.class);
101102

102103
socketPushService.pushToUserEvent(recipient, "notification-status",
103-
java.util.Map.of(
104+
Map.of(
104105
"action", "READ_ALL",
105106
"before", before,
106107
"at", ts

notification-service/src/main/java/com/codecampus/notification/service/kafka/NotificationEventListener.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ public void onNotificationEvent(String raw) {
5757
payload.put("subject", doc.getSubject());
5858
payload.put("body", doc.getBody());
5959
payload.put("param", doc.getParam());
60-
payload.put("createdAt", doc.getCreatedAt());
60+
payload.put("createdAt", doc.getCreatedAt() == null ? null :
61+
doc.getCreatedAt().toEpochMilli());
6162
payload.put("readStatus", doc.getReadStatus());
6263

6364
// 3) Gửi đúng kênh
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.codecampus.submission.configuration.config;
2+
3+
import com.fasterxml.jackson.databind.DeserializationFeature;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.fasterxml.jackson.databind.SerializationFeature;
6+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
7+
import org.springframework.context.annotation.Bean;
8+
import org.springframework.context.annotation.Configuration;
9+
import org.springframework.context.annotation.Primary;
10+
11+
@Configuration
12+
public class JacksonConfig {
13+
14+
@Bean
15+
@Primary
16+
public ObjectMapper objectMapper() {
17+
ObjectMapper mapper = new ObjectMapper();
18+
mapper.registerModule(new JavaTimeModule());
19+
// serialize Instant/LocalDateTime theo ISO-8601 thay vì epoch timestamp
20+
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
21+
// không tự ý đổi timezone khi parse
22+
mapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
23+
return mapper;
24+
}
25+
}

0 commit comments

Comments
 (0)