Spring HTTP状态400-客户端发送的请求在语法上不正确(添加日期输入时)
当我在jsp表单上添加一个日期字段时,我得到了这个错误,但是如果没有它,它可以正常工作 请求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
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”)
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));
}