본문 바로가기

카테고리 없음

java object 복사

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);

 

  - 참고: https://bear1227.tistory.com/17