This is my pojo class
public class TeTripCarDtl implements Serializable {
    private static final long serialVersionUID = -7601044160087552575L;
    @Id
    @Column(name = "CAR_ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long carId;
    @Column(name = "TRIP_ID")
    private long tripId;
    @Column(name = "VEHICLE_TYPE")
    private String vehicleType;
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss", shape = JsonFormat.Shape.STRING)
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PICKUP_DATE_TIME")
    private Date pickUpDateTime;// Here I am getting wrong time value
    @Temporal(value = TemporalType.TIMESTAMP)
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss", shape = JsonFormat.Shape.STRING)
    @Column(name = "RETURN_DATE_TIME")
    private Date returnDateTime;// Here I am getting wrong time value
    @Column(name = "PICK_UP_LOCATION")
    private String pickUpLocation;
    @Column(name = "DROP_OFF_LOCATION")
    private String dropOffLocation;
    @Column(name = "CONFIRMED_SPECIAL_EQUIP")
    private String confirmedSpecialEquip;
    @Column(name = "LAST_UPDATED_BY")
    private String lastUpdatedBy;
    @Temporal(TemporalType.DATE)
    @Column(name = "LAST_UPDATED_ON")
    private Date lastUpdatedOn;
    @Temporal(TemporalType.DATE)
    @Column(name = "BOOKING_DATE")
    private Date bookingDate;
    @Column(name = "STATUS")
    private String status;
    public long getCarId() {
        return carId;
    }
    public void setCarId(long carId) {
        this.carId = carId;
    }
    public long getTripId() {
        return tripId;
    }
    public void setTripId(long tripId) {
        this.tripId = tripId;
    }
    public String getVehicleType() {
        return vehicleType;
    }
    public void setVehicleType(String vehicleType) {
        this.vehicleType = vehicleType;
    }
    public Date getPickUpDateTime() {
        return pickUpDateTime;
    }
    public void setPickUpDateTime(Date pickUpDateTime) {
        this.pickUpDateTime = pickUpDateTime;
    }
    public Date getReturnDateTime() {
        return returnDateTime;
    }
    public void setReturnDateTime(Date returnDateTime) {
        this.returnDateTime = returnDateTime;
    }
    public String getPickUpLocation() {
        return pickUpLocation;
    }
    public void setPickUpLocation(String pickUpLocation) {
        this.pickUpLocation = pickUpLocation;
    }
    public String getDropOffLocation() {
        return dropOffLocation;
    }
    public void setDropOffLocation(String dropOffLocation) {
        this.dropOffLocation = dropOffLocation;
    }
    public String getConfirmedSpecialEquip() {
        return confirmedSpecialEquip;
    }
    public void setConfirmedSpecialEquip(String confirmedSpecialEquip) {
        this.confirmedSpecialEquip = confirmedSpecialEquip;
    }
    public String getLastUpdatedBy() {
        return lastUpdatedBy;
    }
    public void setLastUpdatedBy(String lastUpdatedBy) {
        this.lastUpdatedBy = lastUpdatedBy;
    }
    public Date getLastUpdatedOn() {
        return lastUpdatedOn;
    }
    public void setLastUpdatedOn(Date lastUpdatedOn) {
        this.lastUpdatedOn = lastUpdatedOn;
    }
    public Date getBookingDate() {
        return bookingDate;
    }
    public void setBookingDate(Date bookingDate) {
        this.bookingDate = bookingDate;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    @Override
    public String toString() {
        return "TeTripCarDtl [carId=" + carId + ", tripId=" + tripId + ", vehicleType=" + vehicleType
                + ", pickUpDateTime=" + pickUpDateTime + ", returnDateTime=" + returnDateTime + ", pickUpLocation="
                + pickUpLocation + ", dropOffLocation=" + dropOffLocation + ", confirmedSpecialEquip="
                + confirmedSpecialEquip + ", lastUpdatedBy=" + lastUpdatedBy + ", lastUpdatedOn=" + lastUpdatedOn
                + ", bookingDate=" + bookingDate + ", status=" + status + "]";
    }
}
Input json
    {"vehicleType":"ECAR","pickUpDateTime":"2017-06-10T07:30:04", "returnDateTime":"2017-06-10T07:30:04","pickUpLocation":"PNQ","dropOffLocation":"BOM","confirmedSpecialEquip":"HCL,TCS,INFO","status":"BOOKED"}    
Spring Restcontroller class
@RestController
public class DateControllerTest {
    @RequestMapping(value="date_test", method = RequestMethod.POST)
    public String reciveData(@RequestBody TeTripCarDtl teTripCarDtl){
        System.out.println("PickUpDateAndTime:"+teTripCarDtl.getPickUpDateTime()+","
                + "ReturnDateAndTime:"+teTripCarDtl.getReturnDateTime());
        return "recived";
    }
}
I am printing date values in console it it is printing like this .Here I am getting time is wrong, I suppose to get time 07:30:04 but I am getting 13:00:04 except this everything is fine
    PickUpDateAndTime:Sat Jun 10 13:00:04 IST 2017,ReturnDateAndTime:Sat Jun 10 13:00:04 IST 2017
Please help me with this.
The Jackson @JsonFormat annotation has a specific timezone attribute. If you specify the timezone you wish to use, you can fix this issue.
Example:
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss", timezone = "Europe/Madrid")
Reference: http://fasterxml.github.io/jackson-annotations/javadoc/2.1.0/com/fasterxml/jackson/annotation/JsonFormat.html
The @JsonFormat annotations have timeZone issues. Please check the link for more details on issue.jackson-data-bind issue Overriding the timezone in ObjectMapper didnt worked either. I have solved the problem by implementing custom Date Deserializer as below:
            @Component
            public class CustomDateDeserializer extends StdDeserializer<Date> {
                /**
                * 
                */
                private static final long serialVersionUID = 1L;
                private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); // specify your specific timezone
                public CustomDateDeserializer() {
                this(null);
                }
                public CustomDateDeserializer(Class<?> vc) {
                super(vc);
                }
                @Override
                public Date deserialize(JsonParser jsonparser, DeserializationContext context)
                    throws IOException, JsonProcessingException {
                String date = jsonparser.getText();
                try {
                    return formatter.parse(date);
                } catch (ParseException e) {
                    throw new RuntimeException(e);
                }
                }
            }
and then apply the deserializer on setter method of your bean properties.
@JsonDeserialize(using = CustomDateDeserializer.class)
public void setReturnDateTime(Date returnDateTime) {
this.returnDateTime = returnDateTime;
}
similarly you can implement your custom serializer for vice versa operation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With