I\'m trying to send a DateTime
as a parameter to a method exposed over a WCF RESTful service with JSON encoding. The request looks like this:
POST h
I have to update the answer to this question, I needed to do the same and I used the accepted answer but the obtained Date was wrong, It was giving me a Date of a week before (Don't know why). I don't know much about the Date type of Java but I know some of their methods has been deprecated.
Being said that I think this is the most recent correct answer for this situation. Hope helps Someone else
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
.....
final Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("GMT"));
cal.setTime(value); // Where Value is a Date
final long date = cal.getTime().getTime();
final String senddate = "/Date("+date+")/";
Note the use of Date with the Uppercase "D", this is also needed because it causes problems with the WCF (at least on my case, was stuck a lot just for the lowercase D)
I'm using it to consume a RESTful WCF with Jackson Library for JSON.
To add a complete answer it can be used this Way for a Date that you want to be serialized with jackson.
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.annotate.JsonCreator;
import org.codehaus.jackson.map.SerializerProvider;
import org.codehaus.jackson.map.ser.std.SerializerBase;
/**
* @author HECTOR
*
*/
public class SerializeRESTDate extends SerializerBase {
public SerializeRESTDate() {
// TODO Auto-generated constructor stub
this(Date.class);
}
@JsonCreator
protected SerializeRESTDate(Class t) {
super(t);
// TODO Auto-generated constructor stub
}
@Override
public void serialize(Date value, JsonGenerator jgen,
SerializerProvider provider) throws IOException,
JsonGenerationException {
final Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("GMT"));
cal.setTime(value);
final long date = cal.getTime().getTime();
final String senddate = "/Date("+date+")/";
jgen.writeString(senddate);
}
}
And use it like this in your class'property definition
@JsonSerialize(using = SerializeRESTDate.class)
@JsonProperty("InspectionDate")
/**
* @return the _InspectionDate
*/
public Date get_InspectionDate() {
return _InspectionDate;
}