ObjectMapper를 활용한 object 복사
* OriginObject.java
public class OriginObject {
private String id;
private String password;
private String name;
private String email;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "OriginObject [id=" + id + ", password=" + password + ", name=" + name + ", email=" + email + "]";
}
}
* CopyObject.java
public class CopyObject {
private String id;
private String password;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "CopyObject [id=" + id + ", password=" + password + ", name=" + name + "]";
}
}
* ObjectCopyTest.java
public class ObjectCopyTest extends TestCase {
private final static Logger logger = LoggerFactory.getLogger(ObjectCopyTest.class);
@Test
public void objectCopyTest() throws JsonParseException, JsonMappingException, IOException {
OriginObject origin = new OriginObject();
origin.setId("testId");
origin.setPassword("test1234");
origin.setName("홍길동");
origin.setEmail("test@gmail.com");
logger.info("### origin = {}", origin);
CopyObject prevCopy = new CopyObject();
logger.info("### prevCopy = {}", prevCopy);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(origin);
CopyObject copy = mapper.readValue(json, new TypeReference<CopyObject>() {});
logger.info("### copy = {}", copy);
}
}
ObjectMapper를 활용한 복사 방법
- OriginObject 값을 입력한 후 CopyObject로 값을 복사할 때 ObjectMapper를 활용하면 값을 복사할 수 있다.
- mapper.writeValueAsString(origin);
: object를 json 형태로 변환한다.
- CopyObject copy = mapper.readValue(json, new TypeReference() {});
: 변환된 json String 값을 읽어 CopyObject 타입으로 변환하여 저장한다.
- 하지만 CopyObject에는 email 필드가 없으므로 에러가 난다. 복사 시 없는 필드 목록에 대해 무시할 수 있도록 아래와 같은 처리를 한다.
- 참고: https://soulduse.tistory.com/22
ObjectMapper 복사 시 예외 필드 설정
* CopyObject에 다음과 같은 설정을 한다.
@JsonIgnoreProperties(ignoreUnknown = true)
public class CopyObject {
...
}
- 위의 설정을 하면 정의되지 않은 필드에 대해 무시를 할 수 있다.
- 또는 다음과 mapper.configure 설정으로 오류를 피할 수 있다.
1) jackson 버전 1.X 일 경우 : mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
2) jackson 버전 2.X 일 경우 : mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);