2016-07-08 190 views
1

我已经使用ObjectMapper将对象映射到Json字符串。 我在对象中有日期字段来格式化我使用下面的代码的日期,但它没有按预期格式化。ObjectMapper SetDateFormat()不起作用

我的JSON字符串:

{"leaveRequestId":51,"reason":"xdvfsgf","leaveFromDate":"2016-07-13","leaveToDate":"2016-07-15","leaveTypeId":9,"statusId":1,"instanceId":"7527","createdBy":"pramod","createdOn":"2016-07-07","modifiedBy":null,"modifiedOn":null} 

我使用下面的代码:

@RequestMapping(value="/getLeaveRequest", method = RequestMethod.GET) 
@ResponseBody 
public String getLeaveRequest(int leaveRequestId) throws Exception { 
DAOFactory obj_daofactory=new DAOFactory(); 
ObjectMapper mapper = new ObjectMapper(); 
SimpleDateFormat df = new SimpleDateFormat("yyyy-MMM-dd"); 
mapper.setDateFormat(df); 

LeaveRequest leaveRequest = obj_daofactory.getLeaveRequestDao().findByLeaveRequestId(leaveRequestId); 
if(leaveRequest.getLeaveRequestId() == 0){ 
    return "No data found"; 
} else { 
    System.out.println(leaveRequest.getLeaveFromDate().toString()); 
    String jsonInString = mapper.writeValueAsString(leaveRequest); 
    System.out.println(jsonInString); 
    return jsonInString; 
    } 
} 

MY预期输出:

{"leaveRequestId":45,"reason":"test","leaveFromDate":"2016-Jul-07","leaveToDate":"2016-Jul-08","leaveTypeId":9,"statusId":1,"instanceId":"test1","createdBy":"[email protected]","createdOn":"2016-Jul-07","modifiedBy":"pramod","modifiedOn":"2016-Jul-08"} 

日期必须是在“2016 Jul-资料07“格式

LeaveReq uest.java

import java.util.Date; 

public class LeaveRequest { 
    private int leaveRequestId; 
    private String reason; 
    private Date leaveFromDate; 
    private Date leaveToDate; 
    private int leaveTypeId; 
    private int statusId; 
    private String instanceId; 
    private String createdBy; 
    private Date createdOn; 
    private String modifiedBy; 
    private Date modifiedOn; 

    public LeaveRequest() { 

    } 

    public LeaveRequest(int leaveRequestId, String reason, Date leaveFromDate, Date leaveToDate,int leaveTypeId,int statusId, String instanceId, 
      String createdBy, Date createdOn, String modifiedBy, Date modifiedOn) { 
     this.leaveRequestId=leaveRequestId; 
     this.reason=reason; 
     this.leaveFromDate=leaveFromDate; 
     this.leaveToDate=leaveToDate; 
     this.leaveTypeId=leaveTypeId; 
     this.statusId=statusId; 
     this.instanceId=instanceId; 
     this.createdBy=createdBy; 
     this.createdOn=createdOn; 
     this.modifiedBy=modifiedBy; 
     this.modifiedOn=modifiedOn; 
    } 
    public LeaveRequest(String reason, Date leaveFromDate, Date leaveToDate,int leaveTypeId,int statusId, String instanceId, 
      String createdBy, Date createdOn) { 
     this.reason=reason; 
     this.leaveFromDate=leaveFromDate; 
     this.leaveToDate=leaveToDate; 
     this.leaveToDate=leaveToDate; 
     this.leaveTypeId=leaveTypeId; 
     this.statusId=statusId; 
     this.instanceId=instanceId; 
     this.createdBy=createdBy; 
     this.createdOn=createdOn; 
    } 
    public int getLeaveRequestId() { 
     return leaveRequestId; 
    } 

    public void setLeaveRequestId(int leaveRequestId) { 
     this.leaveRequestId = leaveRequestId; 
    } 

    public String getReason() { 
     return reason; 
    } 

    public void setReason(String reason) { 
     this.reason = reason; 
    } 

    public Date getLeaveToDate() { 
     return leaveToDate; 
    } 

    public void setLeaveToDate(Date leaveToDate) { 
     this.leaveToDate = leaveToDate; 
    } 

    public Date getLeaveFromDate() { 
     return leaveFromDate; 
    } 

    public void setLeaveFromDate(Date leaveFromDate) { 
     this.leaveFromDate = leaveFromDate; 
    } 

    public int getStatusId() { 
     return statusId; 
    } 

    public void setStatusId(int statusId) { 
     this.statusId = statusId; 
    } 

    public int getLeaveTypeId() { 
     return leaveTypeId; 
    } 

    public void setLeaveTypeId(int leaveTypeId) { 
     this.leaveTypeId = leaveTypeId; 
    } 

    public String getCreatedBy() { 
     return createdBy; 
    } 

    public void setCreatedBy(String createdBy) { 
     this.createdBy = createdBy; 
    } 

    public Date getCreatedOn() { 
     return createdOn; 
    } 

    public void setCreatedOn(Date createdOn) { 
     this.createdOn = createdOn; 
    } 

    public String getModifiedBy() { 
     return modifiedBy; 
    } 

    public void setModifiedBy(String modifiedBy) { 
     this.modifiedBy = modifiedBy; 
    } 

    public Date getModifiedOn() { 
     return modifiedOn; 
    } 

    public void setModifiedOn(Date modifiedOn) { 
     this.modifiedOn = modifiedOn; 
    } 

    public String getInstanceId() { 
     return instanceId; 
    } 

    public void setInstanceId(String instanceId) { 
     this.instanceId = instanceId; 
    } 

} 
+0

如果你想要的是2016年7月07日,那么dd-MMM-yyyy显然不是正确的模式。什么是LeaveRequest的代码? –

+0

显示'LeaveRequest#getLeaveFromDate()'方法。它会返回一个'Date'还是'String'? –

+0

请发布你现在得到的实际日期格式 –

回答

-1

这似乎是该领域leaveFromDate,等等......你正在使用java.sql.Date,你应该将它们转换为java.util.DateSimpleFormatDate也正常运行。

+0

你看过他的POJO吗?它清楚地说'import java.util.Date;' – Madhan

+0

我认为只有这个问题导致这个问题 – NguaCon

1

正如你所说你输入的是2016-07-13这就是yyyy-MM-dd格式。你必须使用yyyy-MM-dd读它,虽然书写用yyyy-MMM-dd

ObjectMapper mapper = new ObjectMapper(); 
     try { 
      mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd")); 
      LeaveRequest lrq = mapper.readValue("{\"leaveRequestId\":51,\"reason\":\"xdvfsgf\",\"leaveFromDate\":\"2016-07-13\",\"leaveToDate\":\"2016-07-15\",\"leaveTypeId\":9,\"statusId\":1,\"instanceId\":\"7527\",\"createdBy\":\"pramod\",\"createdOn\":\"2016-07-07\",\"modifiedBy\":null,\"modifiedOn\":null}", LeaveRequest.class); 
      System.out.println(mapper.setDateFormat(new SimpleDateFormat("yyyy-MMM-dd")).writeValueAsString(lrq)); 
     } catch (IOException ex) { 
      Logger.getLogger(NewClass1.class.getName()).log(Level.SEVERE, null, ex); 
     } 
+0

我不认为你的答案是真实的这种情况下,因为他将POJO对象LeaveRequest转换为JSON字符串。 – NguaCon

+0

感谢您展示如何使用ObjectMapper对象的完整示例。你会惊奇地发现它有多难。 – payne8

1

序列化和反序列化将要进入,当你操纵/修改内容按通过ObjectMapper您的要求的图片。您可以参考更多关于此here

此主题也被讨论here