Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring HTTP状态400-客户端发送的请求在语法上不正确(添加日期输入时)_Spring_Jsp_Http_Spring Mvc_Http Status Code 400 - Fatal编程技术网

Spring HTTP状态400-客户端发送的请求在语法上不正确(添加日期输入时)

Spring HTTP状态400-客户端发送的请求在语法上不正确(添加日期输入时),spring,jsp,http,spring-mvc,http-status-code-400,Spring,Jsp,Http,Spring Mvc,Http Status Code 400,当我在jsp表单上添加一个日期字段时,我得到了这个错误,但是如果没有它,它可以正常工作 请求 http://localhost:8080/myTasks/docreatetask?task=hi+there&description=stucked+here&date=2014-02-21&idTaskCategory=1&idTaskPriority=1&idTaskState=1&pending=1&idUser=0&idUser

当我在jsp表单上添加一个日期字段时,我得到了这个错误,但是如果没有它,它可以正常工作

请求

http://localhost:8080/myTasks/docreatetask?task=hi+there&description=stucked+here&date=2014-02-21&idTaskCategory=1&idTaskPriority=1&idTaskState=1&pending=1&idUser=0&idUser_responsible=0&evaluation=aaaaaa
部分表单.jsp

<form method="GET"
    action="${pageContext.request.contextPath}/docreatetask">
    <table>
        <tr>
            <td>Task</td>
            <td><input name="task" type="text" /></td>
        </tr>
        <tr>
            <td>Description</td>
            <td><textarea name="description"></textarea></td>
        </tr>
        <tr>
            <td>Date</td>
            <td><input name="date" type="date"/></td>
        </tr>
部分任务控制器

@RequestMapping("/createtask")
public String createTask(Model model) {
    List<Category> categories = taskService.getCategories();
    List<Priority> priorities = taskService.getPriorities();
    List<State> states = taskService.getStates();
    List<User> users = taskService.getUsers();

    model.addAttribute("categories",categories);
    model.addAttribute("priorities",priorities);
    model.addAttribute("states",states);
    model.addAttribute("users",users);

    return "createtask";
}


@RequestMapping(value="/docreatetask", method=RequestMethod.GET)
public String doCreateTask(Model model, Task task) {
    System.out.println(">TaskController doCreateTask " + task);

    return "taskcreated";
}
@RequestMapping(“/createtask”)
公共字符串createTask(模型){
List categories=taskService.getCategories();
List priorities=taskService.getPriorities();
List states=taskService.getStates();
List users=taskService.getUsers();
model.addAttribute(“类别”,categories);
model.addAttribute(“优先级”,优先级);
model.addAttribute(“状态”,状态);
model.addAttribute(“用户”,用户);
返回“createtask”;
}
@RequestMapping(value=“/docreatetask”,method=RequestMethod.GET)
公共字符串doCreateTask(模型、任务){
System.out.println(“>TaskController doCreateTask”+任务);
返回“taskcreated”;
}
知道这是什么吗

提前谢谢


有关错误的新额外信息 我添加了一些验证注释,并获得了有关错误的新信息

对象“任务”中字段“日期”上的字段错误:值被拒绝 [01/01/2001]; 代码 [typeMismatch.task.date,typeMismatch.date,typeMismatch.java.util.date,typeMismatch]; 论据 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码[任务日期,日期];参数[];默认消息[日期];违约 消息[未能转换“java.lang.String”类型的属性值” 属性“Date”的必需类型“java.util.Date”;嵌套 例外是 org.springframework.core.convert.ConversionFailedException:未能 将java.lang.String类型转换为 @org.springframework.format.annotation.DateTimeFormat java.util.Date 对于值“01/01/2001”;嵌套异常为 java.lang.IllegalArgumentException:无法分析'01/01/2001']

有两个问题:

  • 1参数(idTaskCategory、idTaskPriority、idXXX)与
    任务
    字段不匹配。(这不是问题的原因,但它只是不起作用。当您更改名称以使其匹配时,问题在于您的请求包含ID,但您的
    任务
    expect对象。因此您需要使任务也包含ID,或者您需要注册一些转换器)

  • 2(我认为这就是问题所在),我希望日期格式/转换器不接受提交的日期格式。将
    @DateTimeFormat(pattern=“yyyy-MM-dd”)
    添加到所有日期字段

我认为一个问题可能是您使用http方法
GET
。GET请求使用URL查询字符串(在
之后的内容)发送参数。 但URL的总长度受到浏览器、浏览器和Web服务器的技术限制。 因此,问题的一个原因可能是,如果有很多参数或“long”值(例如长描述),则URL变长。 (这是正确的,但不是原因)


因此,我建议改用http方法
POST
使用
POST
是更好的动词,用于请求更改服务器上的内容()。

很久以前,我也遇到过这个问题

我用以下方法解决了这个问题:

@InitBinder

protected void initBinder(WebDataBinder binder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(
            dateFormat, false));
}

谢谢你的建议。我已经知道了,但不幸的是这不是问题所在。我正在使用GET来查看查询字符串。当我知道如何解决问题时,我将使用POST。@Joe:你是对的,我忽略了POST请求示例。-但是我想我现在已经发现了这个问题。问题1,我可能是一个错误,但是如果我把输入日期从jsp中取出,控制器会得到对象任务,但是日期为空,现在还可以。问题2,我尝试了有验证和没有验证,甚至是不同类型的验证,比如“dd/mm/yyyy”。。。同样的问题也出现了:(我得到了我在问题中添加的新信息,可能对我们有所帮助。你是对的,它与pojo类中的@DateTimeFormat(pattern=“dd/MM/yyyy”)。可能是大写的MM;)一起工作,如果我使用的是日期字段--import java.sql.date,我得到了上述相同的异常。在pojo中,我们必须使用--import java.util.Date
@InitBinder

protected void initBinder(WebDataBinder binder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(
            dateFormat, false));
}