Wednesday, 3 December 2014

ISO 8601 time stamp to Java time stamp using Joda-Time API

Hi Guys,

In this post we are going to see how to convert ISO time stamp to Java and oracle time stamp using Joda-Time API.

Joda-Time provides a quality replacement for the Java date and time classes.
Joda-Time is the de facto standard date and time library for Java. From Java SE 8 onwards, users are asked to migrate to java.time (JSR-310).
For more details on Joda-Time API refer http://www.joda.org/joda-time/.
Let's see how to implement Joda-Time API for converting ISO to Java time stamp. We need to include joda-time-1.6.jar or latest version of dependency for working with Joda-Time API. 


package in.jodatime;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import org.joda.time.DateTime;
import org.joda.time.format.*;

public class Jodatime{

public static void main(String[] args) throws ParseException {

DateTimeFormatter parser = ISODateTimeFormat.dateTimeNoMillis();
String jtdate = "2014-11-06T18:18:47+0000"; // ISO Timestamp
DateTime dateTime = parser.parseDateTime(jtdate); // Parse ISO timestamp
String tempDate = dateTime .toString();
System.out.println(tempDate);

  //Create SimpleDataFormat For converting from ISO to Java and to Oracle
SimpleDateFormat dateFormat = new SimpleDateFormat("yy-MM-dd'T'h:mm:ss");
Date date = dateFormat .parse(tempDate );
System.out.println(date);

dateFormat = new SimpleDateFormat("dd-MMM-yy h:mm:ss a", Locale.ENGLISH);
String formatDate = dateFormat .format(date);
System.out.println(formatDate );

}
}


Output:

That's all Folk's..




Monday, 24 November 2014

Jackson Ignore null / empty values in JSON serialization with @JsonInclude

Hi Guys,

In this post we are going to see how to ignore null and Empty values using Jackson @Include Annotations.
Jackson 2.x provides @JsonInclude annotation to specify the property that should be included during serialization based on its values.

@JsonInclude can have following values
  • Include.ALWAYS indicates that property is serialized irrespective of its value
  • Include.NON_DEFAULT indicates that property is serialized if its value is different from default settings
  • Include.NON_EMPTY indicates that property is serialized if its value is not null and not empty
  • Include.NON_NULL indicates that property is serialized if its value is not null
Jackson 2.x JAR Dependency

To serialize or unserialize JSON using Jackson 2.x requires following three jar files in classpath
  • Core – jackson-core-2.2.3.jar
  • Annotations – jackson-annotations-2.2.3.jar
  • Databind – jackson-databind-2.2.3.jar
Jackson 2.x JAR Download URL
Download Jackson 2.x Libraries

Jackson Ignore null/empty values Example
User.java
In User Java Bean class, city is annotated with @JsonInclude(value=Include.NON_EMPTY) so it will be included in serialization only if its value is non null and non empty string. Similarly, height is annotated with @JsonInclude(value=Include.NON_NULL) so it will included in serialization only if its value is non null.


package in.binding
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
/**
* @author Visakh
*/
public class User {

private String name;
@JsonInclude(value=Include.NON_EMPTY)
private String city;
private Integer age;
@JsonInclude(value=Include.NON_NULL)
private Double height;
private Boolean married;

public User() {
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getCity() {
return city;
}

public void setCity(String city) {
this.city = city;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public Double getHeight() {
return height;
}

public void setHeight(Double height) {
this.height = height;
}

public Boolean getMarried() {
return married;
}

public void setMarried(Boolean married) {
this.married = married;
}

@Override
public String toString() {
return "User [name=" + name + ", city=" + city + ", age=" + age
+ ", height=" + height + ", married=" + married + "]";
}
}

JsonSerializationExample.java

In JsonSerializationExample, city is set to empty string and height is not set i.e. eventually set to null.

package in.binding;

import java.io.IOException;

import com.fasterxml.jackson.databind.ObjectMapper;

/**
* @author Visakh
*/
public class JsonSerializationExample {

public static void main(String args[]) {

User user = new User();
user.setName("Visakh");
user.setCity(""); //city is set to empty string
user.setAge(23);
// user.setHeight(5.7); height is not set; hence it will be null
user.setMarried(Boolean.FALSE);
System.out.println("User: " + user);

try {
// ObjectMapper provides functionality for data binding between
// Java Bean Objects/POJO and JSON constructs/string
ObjectMapper mapper = new ObjectMapper();

// serialize userList to JSON format and write to file
String jsonString = mapper.writeValueAsString(user);

System.out.println("JSON string: " + jsonString);
} catch (IOException e) {
e.printStackTrace();
}
}
}

Example Output
As shown in log output, city and height are not serialized to JSON string.


  • User: User [name=Visakh, city=, age=23, height=null, married=false]
  • JSON string: {"name":"Visakh","age":23,"married":false}

If you want to ignore null or empty values globally you can set it using Mapper Serialization.
Instead of using @Include in all classes use Serialization in Main class.

  • mapper.setSerializationInclusion(Include.NON_EMPTY);
By using setSerializationInclusion Method you can set it globally.

That's All Folks