当前位置: 首页 > 知识库问答 >
问题:

Spring MVC:必需的日期参数“日期”不存在

邢新
2023-03-14

我正在使用SpringMVC编写一个Web应用程序。在我的jsp中是一个表单,内容与Ajax一起发送到我的控制器。映射方法的简化代码如下所示:

@RequestMapping(value = "/filter", method = RequestMethod.POST)
public String filter(@RequestParam(required=false) Date createdTo) { }

我已将CustomDateEditor注册到:

@InitBinder
public void registerBinders(WebDataBinder binder){
    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(format, true));
}

当表单输入中的字符串正确时,不会抛出异常。问题是,当日期的输入为空或包含无法转换为日期的字符串时,我会得到异常:< code >所需的日期参数' createdTo '不存在。

我甚至编写了自己的DateEditor,在调试期间,我注意到当编辑器使用setValue(null)将返回值设置为null时,就会出现问题。当我更改代码,使返回的值为当前日期setValue(new date())时,即使空String也可以正常工作

为什么我的映射方法不允许`@RequestParam(required=false)Date createdTo'为空值?为什么会这样,我怎么能欺骗它呢?

请求与以下命令一起发送:

$.ajax({
type: 'POST',
url: '<c:url value="/admin/documents/filter"/>',
data: data
}).done(doneFunction);

控制器代码是:

@Controller

@Request estMap("/admin/Document")公共类AdminDocumentsController扩展BaseController{

@InitBinder
public void registerBinders(WebDataBinder binder) {
    binder.registerCustomEditor(Date.class, new DateEditor());
}

@RequestMapping(value = { "", "/" }, method = RequestMethod.GET)
public String showDocuments(Model model) {
    model.addAttribute("so", new DocumentsSearchOptions());
    return "admin/documents";
}

@RequestMapping(value = "/filter", method = RequestMethod.POST)
public @ResponseBody Map<String, Object> filter(@RequestParam String number,
        @RequestParam String invoiceNumber,
        @RequestParam String userSurname, @RequestParam(required=false) Double fromPrice,
        @RequestParam(required=false) Double toPrice, @RequestParam(required=false) Integer fromPoints,
        @RequestParam(required=false) Integer toPoints, @RequestParam String createdFrom,
        @RequestParam(required=false) Date createdTo, @RequestParam String invoiceFrom,
        @RequestParam String invoiceTo, @RequestParam String paidFrom,
        @RequestParam String paidTo) {

    Map<String, Object> model = new HashMap<>();

    return model;
}

当相应的输入字段留空时,日期和对象包装器抛出MissingServletRequestParameterException

共有1个答案

韦欣德
2023-03-14

您得到的异常(< code > MissingServletRequestParameterException )实际上只在需要参数时抛出,而不存在参数时抛出。该参数甚至可以为空。

此外,绑定在参数检查后发生。这意味着,当您获得异常时,它是在调用自定义编辑器之前。

问题一定与另一种方法有关。也许您在filter方法中重定向。

 类似资料:
  • 本文向大家介绍springmvc接收参数为日期类型详解,包括了springmvc接收参数为日期类型详解的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了springmvc接收参数为日期类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 用单个Date类型接收日期类型时,会出现报错,加上initBinder的方法 意思是将所有传入的参数都

  • 背景:我将Kotlin与Micronaut一起使用,对于这个项目,我不会添加Spring依赖项。 我成功地创建了一个Hello Word enpoint,我可以从邮递员那里发布到它。问题始于我将数据演化为生日(java.time.LocalDate)。 抄袭自邮递员 导致 实体 控制器 gradle.properties依赖关系 格雷德尔。属性 整个项目git hub(分支机构日期问题中的错误,而

  • 我一直在尝试使用: 使用此链接: 但我有一个错误: 当我换成: 是工作。我能做些什么来和日期一起工作? 谢啦

  • 本文向大家介绍SpringMVC 传日期参数到后台的实例讲解,包括了SpringMVC 传日期参数到后台的实例讲解的使用技巧和注意事项,需要的朋友参考一下 1、注解方式,在controller层通过initBinder注解实现 2、类型转换,SpringMvc提供了Converter接口 spring.xml中配置转换器 以上这篇SpringMVC 传日期参数到后台的实例讲解就是小编分享给大家的全

  • 这是我的Firebase结构 我想在每个用户的第二个名字下面的“预订”下存储一天中的日期和时间,然后选择一天中的日期和时间。 这是我到目前为止用错误的方法得到的结果。它在名为“MyBookings”的单独子节点下设置日期 基本上,我所做的是单击一个显示日期和时间选择器的EditText,我需要将该日期存储在Firebase实时数据库中。 这是我的Firebase参考,我知道它是错误的,但不知道如何

  • 我需要我的Java Android应用程序来提取和比较日期,但是要获得正确的日期一团糟。 实际运行时间:2022年1月10日周一22:29 结果: 日期当前时间=星期一 一月 10 22:29:53 GMT 01:00 2022 (正确日期) 日历.get(日历年)=2022.0.10 21:29:53 (错误的月份,错误的小时) 当前时间.getyear()=122.0.1 22:29:53 (