我使用ObjectMapper将对象映射到Json String。 我在对象中有日期字段来格式化我使用下面代码的日期,但它没有按预期格式化。
我的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;
}
}
我期望的OutPut:
{"leaveRequestId":45,"reason":"test","leaveFromDate":"2016-Jul-07","leaveToDate":"2016-Jul-08","leaveTypeId":9,"statusId":1,"instanceId":"test1","createdBy":"deepak.paul@muraai.com","createdOn":"2016-Jul-07","modifiedBy":"pramod","modifiedOn":"2016-Jul-08"}
日期必须采用“2016年7月7日”格式
LeaveRequest.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 :(得分: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);
}
答案 1 :(得分:1)
答案 2 :(得分:0)
我编写了这段代码,将日期转换为“ yyyy-MM-dd”,理想情况下应该可以,但是没有实现
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setTimeZone(TimeZone.getDefault());
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(dateFormat);
myObj =objectMapper.readValue(file,MyObj.class)
输出为-"paymentDate": "2019-08-18T23:00:00.000+0000"
,这不是我期望的。。
将其更改为将ObjectMapper声明为Bean,然后将ObjectMapper注入为依赖项
//Make sure the class is annotated with @Configuration or appropriate
@Bean
public ObjectMapper objectMapper() {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setTimeZone(TimeZone.getDefault());
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(dateFormat);
return mapper;
}
和服务中类,只需将其作为依赖项注入
@Autowired
private ObjectMapper objectMapper;
somemethod(){
myObj =objectMapper.readValue(file,MyObj.class)
}
输出如预期的那样-“ paymentDate”:“ 2019-08-19”-
答案 3 :(得分:-1)
似乎是leaveFromDate
等字段......您正在使用java.sql.Date
,您应该将它们转换为java.util.Date
。 SimpleFormatDate
也正常运行。