Java springmvc中yyyy-MM-dd格式的日期绑定
这样,我想要的日期格式就不起作用了,这就是我得到的输出 expenseDate=2015年3月18日星期三05:30:00Java springmvc中yyyy-MM-dd格式的日期绑定,java,spring,spring-mvc,Java,Spring,Spring Mvc,这样,我想要的日期格式就不起作用了,这就是我得到的输出 expenseDate=2015年3月18日星期三05:30:00 但是我想把它转换成一种特殊的格式,比如yyyy-MM-dd。。。建议我做这件事的方法 我想说的是,你的活页夹可能很好用。它所做的是从HTTP请求主体中获取格式为yyyy MM dd的字符串,并将其转换为日期对象。但这就是它的全部功能。之后如何处理该日期对象取决于您。如果您想将它作为字符串传递给程序的其他部分,您应该转换它,也许可以使用SimpleDataFormatter。
但是我想把它转换成一种特殊的格式,比如yyyy-MM-dd。。。建议我做这件事的方法 我想说的是,你的活页夹可能很好用。它所做的是从HTTP请求主体中获取格式为yyyy MM dd的字符串,并将其转换为日期对象。但这就是它的全部功能。之后如何处理该日期对象取决于您。如果您想将它作为字符串传递给程序的其他部分,您应该转换它,也许可以使用SimpleDataFormatter。这不是更容易吗 实体或窗体支持对象:
@RequestMapping (value = "/saveExpenses", method=RequestMethod.POST)
public String saveExpenses (@RequestBody ExpenseDetailsListVO expenseDetailsListVO, Model model,BindingResult result) {
if (result.hasErrors()) {
System.out.println(result.getFieldError().getField().toString()+" error");
}
System.out.println(expenseDetailsListVO);
return "success";
}
@InitBinder
public void initBinder(WebDataBinder webDataBinder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
webDataBinder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
以某种形式:
class Foo {
/* handles data-binding (parsing) and display if spring form tld or spring:eval */
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
private Date expenseDate;
...
}
或者只是为了显示:
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<form:form modelAttribute="modelAttributeName">
<form:input type="date" path="expenseDate" />
</form:form>
一些迂腐的注释:
有关最佳实践,请参见我的帖子:我不知道这个答案是否对您有帮助? 我的一个实体类如下所示
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<spring:eval expression="modelAttributeName.expenseDate" />
然后像这样输入。。
这很好用。事件包含incidentDate=Wed Aug 23 00:00:00 BDT 2017
如果您不想在实体类中使用@DateTimeFormat(pattern=“dd/MM/yyyy”)
,请将下面的方法放在控制器类中
@RequestMapping(value = "/saveIncident.ibbl", method = RequestMethod.POST)
public ModelAndView saveIncident(
@ModelAttribute("incident")
Incident incident,
BindingResult result){
System.out.println(incident.getIncidentDate());
// Wed Aug 23 00:00:00 BDT 2017
}
我想ExpenseDetailsListVO类的成员类型为Date。在expenseDetailsListVO上调用println时,它将只调用该日期成员的toString()方法。您的活页夹不涉及任何方式。因此,您将获得日期的默认字符串表示形式。您可以更改打印对象的方式,也可以使用一个新的类来扩展Date,但使用不同的toString()来存储支出日期。是的,您是对的。。。成员是日期类型的,因为在后端它也是日期类型的,所以当从VO转换为日期类型时会很容易。。。那么我现在该怎么办呢???@Sharique试试dateFormat.format(yourDateObj)
嘿,谢谢你的建议!!HTTP请求正文以yyyy-MM-dd格式绑定它,但是我可以在绑定之前更改它的格式吗,就像在这种格式dd-MM-yyyy中一样,您可以将它的类型保留为字符串,而不是在绑定器中首先将它转换为日期,而不是返回到您实际需要的字符串格式。我应该说这似乎有点奇怪,但既然你没有提供你想在那一天做什么的信息,我就不能提出任何其他建议。我只是想了解一下。。。我只是想把它转换成日期对象,然后保存到数据库中。。。那么我应该在哪里把它转换成对象呢?我的意思是,它已经是一个对象了,确切的类是Date。只需将其传递给数据库保存方法,它应该是ok的。但它是String类型,我的后端pojo类是date类型……假设我也将其转换为date类型,但在我的数据库中它也是date类型
@Entity
@Table(name = "TAIMS_INC_INCIDENT")
public class Incident implements Serializable{
@DateTimeFormat(pattern = "dd/MM/yyyy") // This is for bind Date with @ModelAttribute
@Temporal(TemporalType.DATE)
@Column(name = "inc_date")
private Date incidentDate;
}
<input type="text" id="incident-date" name="incidentDate" value="23/08/2017" />
@RequestMapping(value = "/saveIncident.ibbl", method = RequestMethod.POST)
public ModelAndView saveIncident(
@ModelAttribute("incident")
Incident incident,
BindingResult result){
System.out.println(incident.getIncidentDate());
// Wed Aug 23 00:00:00 BDT 2017
}
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}