Java Date()自动更正我们在输入文本字段中键入的日期
我有一个带输入文本字段的SpringMVC表单。我用java日期对象映射该字段。当我键入错误的日期时(例如,34/01/1985),在后端会自动更正日期,并将其作为03/02/1985(1985年2月3日)。我想停止此自动更正以在后端验证 伙计们,给我一个解决方案 更新:Java Date()自动更正我们在输入文本字段中键入的日期,java,date,spring-mvc,Java,Date,Spring Mvc,我有一个带输入文本字段的SpringMVC表单。我用java日期对象映射该字段。当我键入错误的日期时(例如,34/01/1985),在后端会自动更正日期,并将其作为03/02/1985(1985年2月3日)。我想停止此自动更正以在后端验证 伙计们,给我一个解决方案 更新: <form:input path="person.dateOfBirth" placeholder="DD/MM/YYYY"/> public class Person implements Cloneabl
<form:input path="person.dateOfBirth" placeholder="DD/MM/YYYY"/>
public class Person implements Cloneable{
@DateTimeFormat(pattern = "dd/MM/yyyy")
private Date dateOfBirth;
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
}
public void post(
PortletSession session,
ActionRequest request,
ActionResponse response,
@ModelAttribute("form") Form form,
BindingResult errors,
ModelMap mm) throws Exception {
print(form.getPerson().getDateOfBirth());
}
公共类Person实现了Cloneable{
@日期时间格式(pattern=“dd/MM/yyyy”)
私人出生日期;
公共日期getDateOfBirth(){
出生返回日期;
}
公共无效设置出生日期(出生日期){
this.dateOfBirth=出生日期;
}
}
公开职位(
PortletSession,
行动请求请求,
行动回应,
@ModelAttribute(“表单”)表单,
绑定结果错误,
ModelMap(mm)引发异常{
打印(form.getPerson().getDateOfBirth());
}
尝试setLenient(false)
供参考:[UPDATE;AJAX调用]
只需使用spring的@DateTimeFormat
注释并指定您的模式
import org.springframework.format.annotation.DateTimeFormat;
class Form {
...
private static final String DATE_PATTERN = "dd/MM/yyyy";
@DateTimeFormat(pattern = DATE_PATTERN)
private Date yourDate;
...
}
确保您的Spring MVC控制器
验证了您的表单:
@RequestMapping(value = "/path")
@ResponseBody
public final boolean validateFormOnSever(@Valid @ModelAttribute("yourForm") final Form form,
final BindingResult bindingResult, final Model model) {
return bindingResult.hasErrors();
}
现在,当您收到false(或类似{field,hasError}的JSON对象)时,您将显示所需的消息。在前端使用输入类型作为日期。HTML5有了这个功能,用户只能选择有效日期,这看起来很酷。只需应用并查看结果:)这将很难。因为框架做了所有的映射。当自定义代码收到日期时,执行某些操作已经太晚了。请使用字符串而不是日期,然后自己解析它(禁用“lenient”)。java util date有什么解决方法吗?我们不能用java util Date来实现它吗?否。
java.util.Date
无法存储像“34/01/1985”这样的值。自1980年1月1日以来,它有一个内部变量-毫秒计数。:(Date()的所有db字段映射都已完成).好的,不管怎样,如果你找到了解决方法,请告诉我们。workaround很简单。对db和rest服务使用不同的类。我已经尝试了你在这里演示的相同方法。但它仍然可以自动更正我们错误键入的日期。要验证日期,我如何获得个人类型的实际值?你在控制器w中注释了你的表单吗使用@Valid annotation?事实上,我正在一个ajax调用中验证日期。在那里我得到了自动更正的值。是否有任何方法可以在不将模型属性注释为@Valid的情况下发现弹簧类型不匹配?@nasminspy,我已经更新了我的答案。好的,谢谢。我会尝试让您知道。