관리 메뉴

KorSA

JAVA <-> gRPC 객체 (feat. Timestamp) 본문

Development Experience/Web

JAVA <-> gRPC 객체 (feat. Timestamp)

Praiv. 2022. 4. 1. 13:39
320x100

# JAVA 객체 -> gRPC Proto 객체

JAVA 객체를 gRPC proto 객체로 컨버팅을 할 때 

ObjectMapper 클래스를 사용할 수 있다. 이 ObjectMapper로 JAVA 객체를 Serialize하여 JSON String을 만들고

다시 이 JSON String을 gRPC proto 객체로 해석하는 것이다.

 

MyJavaObj javaObj = new MyJavaObj();        
ObjectMapper mapper = new ObjectMapper();	

# JAVA 객체 -> JSON
String json = mapper.writer().writeValueAsString(javaObj);
        
# gRPC proto 객체의 builder를 얻어옴
Builder builder = MyGrpcProtoObj.getDefaultInstanceForType().newBuilderForType();
		
# JSON -> gRPC proto 객체
JsonFormat.parser().merge(json, builder);
MyGrpcProtoObj protoObj = builder.build();

 

하나 주의할 점은 이 변환을 하면서 JAVA 객체와 JSON 사이의 Timestamp 포맷이 맞지 않아 오류가 발생한다.

이 경우 아래처럼 mapper의 SerializationFeature.WRITE_DATES_AS_TIMESTAMPS 옵션을 disable 시켜주면 된다.

MyJavaObj javaObj = new MyJavaObj();        
ObjectMapper mapper = new ObjectMapper();	

# Timestamp 포맷 처리
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

# JAVA 객체 -> JSON
String json = mapper.writer().writeValueAsString(javaObj);
        
# gRPC proto 객체의 builder를 얻어옴
Builder builder = MyGrpcProtoObj.getDefaultInstanceForType().newBuilderForType();
		
# JSON -> gRPC proto 객체
JsonFormat.parser().merge(json, builder);
MyGrpcProtoObj protoObj = builder.build();

 

# gRPC Proto 객체 -> JAVA 객체

반대로,

gRPC 객체를 JAVA 객체로 변환하려면 위의 과정과 반대로 진행하면 된다.

MyGrpcProtoObj protoObj;

# gRPC proto 객체 -> JSON
String json = JsonFormat.printer().includingDefaultValueFields().print(protoObj);
        
# JSON -> JAVA 객체
ObjectMapper mapper = new ObjectMapper();
return mapper.reader().readValue(json, MyJavaObj.class);
728x90
728x90
Comments