Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

How to Copy Bean Properties With a Single Line of Code

DZone's Guide to

How to Copy Bean Properties With a Single Line of Code

· Java Zone
Free Resource

What every Java engineer should know about microservices: Reactive Microservices Architecture.  Brought to you in partnership with Lightbend.

This article shows how to copy multiple properties from one bean to another with a single line of code, even if the property names in the source and target beans are different.

Copying properties from one bean is quite common especially if you are working with a lot of POJOs, for example working with JAXB objects. Lets walk through the following example where we want to copy all properties from the User object -> SystemUser object

Example: source and target objects

// source object that we want to copy the properties from
public class User {
private String first;
private String last;
private String address1;
private String city;
private String state;
private String zip;
private String phone;

// getters and setters
// ...
}

// target object that we want to copy the properties to
public class SystemUser {
private String firstName;
private String lastName;
private String phone;
private String addressLine1;
private String addressLine2;
private String city;
private String state;
private String zip;

// getters and setters
// ...
}

Example continued: Preparing the objects

// initializing the source object with example values
User user = new User();
user.setFirst("John");
user.setLast("Smith");
user.setAddress1("555 Lincoln St");
user.setCity("Washington");
user.setState("DC");
user.setZip("00000");
user.setPhone("555-555-5555");

// creating an empty target object
SystemUser systemUser = new SystemUser();

Approach 1: Traditional code for copying properties

 systemUser.setFirstName(user.getFirst());  
systemUser.setLastName(user.getLast());
systemUser.setPhone(user.getPhone());
systemUser.setAddressLine1(user.getAddress1());
systemUser.setAddressLine2(user.getAddress2());
systemUser.setCity(user.getCity());
systemUser.setState(user.getState());
systemUser.setZipcode(user.getZip());

Approach 2: Single line code for copying properties

copyProperties(user, systemUser, "first firstName", "last lastName", "phone",
"address1 addressLine1", "address2 addressLine2", "city", "state", "zip zipcode");

Parameters

  1. user – the source object
  2. systemUser – the target object
  3. first firstName – indicates that the “first” property of the source object should be copied to the “firstName” property of the target object
  4. last lastName – indicates that the “last” property of the source object should be copied to the “lastName” property of the target object
  5. phone – indicates that the “phone” property of the source object should be copied to the “phone” property of the target object
  6. …. and so on

The underlying code uses Apache Commons BeanUtils code to copy the property value from the source to the destination.

You can download the copyProperties code from Google Code. Simply copy the code to your project. The code requires apache BeanUtils. If you are using maven, you can get BeanUtils by adding the following to your pom.xml

 <!-- for maven only, add this to your pom to get BeanUtils, needed by the copyProperties code -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.3</version>
</dependency>

From http://www.vineetmanohar.com/2010/08/copy-map-bean-properties/

Microservices for Java, explained. Revitalize your legacy systems (and your career) with Reactive Microservices Architecture, a free O'Reilly book. Brought to you in partnership with Lightbend.

Topics:

Opinions expressed by DZone contributors are their own.

THE DZONE NEWSLETTER

Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

X

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}