springMvc 页面400 与 时间类型 转换异常

提交表单中时

页面出现出现 400 : 参数不对  不进入方法

日志在控制台中 出现以下错误 

日志文件中出现  

[typeMismatch.items.createtime,typeMismatch.createtime,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [items.createtime,createtime]; arguments []; default message [createtime]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'createtime'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type java.util.Date for value '2018-07-21 13:48:00'; nested exception is java.lang.IllegalArgumentException]

 

原因:springMvc无法将页面传入的 input框中的 文本类型 String 无法 转换成  Date类型 需要手动配置

方法 一 :

在  实体类中  找到 Date 类型 set 方法上面添加   @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")  注解

优点:快捷

缺点:有多个Date类型 就需要配置多个 注解 

配置一个 转一个 

 @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    public void setCreatetime(Date createtime) {
    	this.createtime = createtime;
    }

 

方法二:

 

添加一个 类   

优点:一个转换器 可以转换多个 Date类型 

缺点:配置有点多

public class CustomerGlobalStrToDateConverter implements Converter {

	@Override
	public Date convert(String source) {
		 try {
			Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(source);
			//转换成功就返回一个 date 
			return date;
		 } catch (ParseException e) {
			
			e.printStackTrace();
		}
		 //转换失败就返回一个 空
		return null;
	}

 

在springMvc.xml 中添加 配置一个自定义转换器

 
		
			
				
				
			
		
	 

 

在注解驱动上添加 conversion-service="指定的转换器 id"

注解驱动:自动加载 最新版本的 处理器映射器 和处理器显示器

 


	

数据库中和实体类的是  Date类型  

页面上拿到的String类型的值

都会转成  都会把 String 转成 Date 类型

 

	@RequestMapping("/updateitem")
	public String update(Items items) throws Exception{

		itemsService.updateItems(items);
		
		return "success";
	}

流程

执行方法时 先会判断传入实体类  参数类型 与 数据库中的字段类型 是否匹配 

匹配就执行方法

不匹配就执行拦截器

拦截器 会找到 SpringMvc.xml  中的 处理器映射器 中看是否有相对应的 转换器  有就执行

没有就报 400 同时不进入方法

个人观点  有不正确的地方 希望各位能指正

 

你可能感兴趣的:(springMvc 页面400 与 时间类型 转换异常)