欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

代码报错集1:日期参数书写格式

程序员文章站 2022-05-29 10:24:46
...

日期参数书写格式,导致404问题:
1、在ParamController类中添加param3方法,代码实现如下:

package com.tedu.controller;
import java.util.Date;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller /* 这个注解表示当前类是属于控制层 */
public class ParamController {
	/* 测试:接收日期类型的参数 */
	@RequestMapping("param3")
	public String param3(Date date){
		System.out.println("date="+date.toLocaleString());
		return "home";
	}

	@RequestMapping("param2")
	public String param2(User user){
		System.out.println("user="+user);
		return "home";
	}
	
	@RequestMapping("param1")
	public String param1(String name, Integer age){
		System.out.println("name="+name);
		System.out.println("age="+age);
		return "home";
	}
}

2、访问ParamController中的param3方法,在访问时,注意将date参数一起发送给服务器:
正确方式:localhost/param3?date=2019/1/21

控制台输出结果为:
date=2019-1-21 0:00:00

**? 当访问ParamController中的param3方法,如果传递给服务器的日期数据是如下格式:
方式:localhost/param3?date=2019-1-21
则会出现404报错,其实是因为参数格式匹配错误,由于springmvc默认的日期格式是yyyy/MM/dd,因此如果日期参数不是 yyyy-MM-dd 格式,就会出现400错误!!

解决方案:
在springmvc中,提供了@InitBinder注解,用于指定自定义的日期转换格式,因此,我们只需要在Controller类中添加下面的代码即可,在接受日期类型的参数时,会自动按照自定义的日期格式进行转换。

public class ParamController {
	
	@RequestMapping("param3")
	public String param3(Date date){
		System.out.println("date="+date.toLocaleString());
		return "home";
	}
	
	/* 自定义日期转换格式 */
	@InitBinder
	public void InitBinder (ServletRequestDataBinder binder){
		binder.registerCustomEditor(java.util.Date.class, 
			new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true)
		);
	}
	...
	...
}