Java springmvc中yyyy-MM-dd格式的日期绑定

Java 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。

这样,我想要的日期格式就不起作用了,这就是我得到的输出 expenseDate=2015年3月18日星期三05:30:00
但是我想把它转换成一种特殊的格式,比如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>

一些迂腐的注释:

  • 将CSS用于布局,而不是表格。请参阅Bootstrap的网格系统
  • 将模式用于表单
  • 使用Spring的表单taglib进行适当的HTML转义和CSRF保护
  • 在控制器处理程序方法中使用@Validated进行验证
  • 表单中“占位符”前缺少空格

  • 有关最佳实践,请参见我的帖子:

    我不知道这个答案是否对您有帮助? 我的一个实体类如下所示

    <%@ 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));
        }