1. 程式人生 > >spring屬性注入中的date注入異常解決方案

spring屬性注入中的date注入異常解決方案

 

 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'user' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [java.util.Date] for property 'inDate'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property 'inDate': no matching editors or conversion strategy found
Caused by: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [java.util.Date] for property 'inDate'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property 'inDate': no matching editors or conversion strategy found
Caused by: java.lang.IllegalArgumentException: Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property 'inDate': no matching editors or conversion strategy found
 at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:231)
 at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:138)
 at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:380)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1112)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:862)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:424)
 at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:287)
 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
 at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:91)
 at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:75)
 at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65)
 at main.Test.main(Test.java:12)

----------------------------------------------------------

程式碼:

package domain;

import java.util.Date;
import java.util.List;

public class User {
 private String userName;
 private int userAge;
 private List userHobby;
 private Date inDate;
 public Date getInDate() {
  return inDate;
 }
 public void setInDate(Date inDate) {
  this.inDate = inDate;
 }
 public int getUserAge() {
  return userAge;
 }
 public void setUserAge(int userAge) {
  this.userAge = userAge;
 }
 public List getUserHobby() {
  return userHobby;
 }
 public void setUserHobby(List userHobby) {
  this.userHobby = userHobby;
 }
 public String getUserName() {
  return userName;
 }
 public void setUserName(String userName) {
  this.userName = userName;
 }
 
 public void say()
 {
  System.out.println("myName is "+this.getUserName());
  for(int i=0;i<this.getUserHobby().size();i++)
  {
   System.out.println("my hobby is "+this.getUserHobby().get(i).toString());
  }
  System.out.println("my income date is "+this.getInDate());
 }
}

spring配置檔案:

<property name="inDate">
   <value>1984-04-11</value>
  </property>

這樣是不行的  看了也知道  這個1984-04-11是字串 怎麼能賦給date呢  那怎麼解決呢  那我們就要寫個屬性編輯器(轉換器?)

----------------------------------------------------------------------解決步驟-------------------------------------------------

1 寫一個dateEditor 來繼承 java.beans.PropertyEditorSupport;

package util;

import java.beans.PropertyEditorSupport;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateEditor extends PropertyEditorSupport {

 @Override
 public void setAsText(String dateStr) throws IllegalArgumentException {
  Date d =this.parseToDate(dateStr);
  this.setValue(d);
 }
 
 private Date parseToDate(String date)
 {
  String format = "yyyy-MM-dd";
  DateFormat df =new SimpleDateFormat(format);
  Date d = null;
  try {
   d = df.parse(date);
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return d;
 }
}

寫好之後 我們可以專門寫一個配置檔案放這個

applicationContext-editor.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
 xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
 <bean id="dateEditor" class="org.springframework.beans.factory.config.CustomEditorConfigurer"> <!--註冊我們的類-->
  <property name="customEditors">
   <map>
    <entry key="java.util.Date">
     <bean class="util.DateEditor"></bean>
    </entry>
   </map>
  </property>
 </bean>
</beans>

------------------------------------------------------ok 大功告成 測試----------------------------------

 BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext-*.xml");
  User user = (User)factory.getBean("user");
  user.say();

--------------------------------------輸出結果-------------------------------
my income date is Wed Apr 11 00:00:00 CST 1984   只是這裡為沒按照 yyyy-MM-dd來輸出 奇怪哦

相關推薦

spring屬性注入date注入異常解決方案

   org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'user' defined in class path resource [applicati

Spring boot引數注入,@Value失效以及解決方案

問題 專案中我們都要要儘量避免將引數直接寫程序序裡,這樣一旦需要需要修改配置,我們可以只需要在配置檔案裡做修改,而不必在程式裡找,這樣可以避免很多錯誤,個人專案可能不會注意這一點,但是需要上線釋出的專案,Configure配置檔案就顯得非常重要!現在很多公司其

Spring Boot 物件Date型別自段轉json時的格式問題解決

一、背景 今天一個同事諮詢如何解決後臺返回json時,Date型別的格式化如何解決。幫這個兄弟解決完後,覺得雖然很簡單,還是寫寫記錄下來,以後別人再問可以直接給連線了。 這位同事使用的是SpringBoot1.0框架。對這個問題1.0 和2.0沒有區別。 二、處理單個或

springMVC之spring容器注入失敗的一種解決方案

spring-config.xml中存在掃描service類所在的包,而我在初學springMVC時,在web.xml只配置載入了spring-web.xml,因此我在controller層呼叫service類中的方法時,就會出現以上問題。web.xml的部分程式碼<servlet> <se

Spring bean配置注入引數

字面值 <bean id = "car" class = "com.samrt.attr.Car"> <property name = "maxSpeed> <value>200</value

spring 配置檔案如何注入map list set等型別

先定義一個bean import java.util.List; import java.util.Map; import java.util.Properties; import java.util

spring@RequestBody,bean屬性名和json不一致解決方案

spring中@RequestBody,對應的bean中屬性名不一致解決方案參考資料:https://blog.csdn.net/renxyz/article/details/44734235sprin

Intellij IDEAMybatis Mapper自動注入警告的6種解決方案

相信使用Mybaits的小夥伴們一定會經常編寫類似如下的程式碼: 可以看到 userMapper 下有個

2018 反射呼叫service層,@Resource注入失敗為空的解決方案

背景:            想利用反射動態呼叫service層的方法。實踐發現,反射呼叫service的方法後,@Resource注入的物件為空。 原因:          

spring配置 no matching editors or conversion strategy found 異常解決方案

spring 配置中遇到該問題,可以通過注入的方式解決,程式碼如下:  <tx:annotation-driven transaction-manager="myTxManager" proxy-target-class="true"/> 總結:Spring注入的是介面,關

SQL注入:sleep()函式相關解決方案

最近做安全掃描的時候,經常遇到sleep()型的SQL注入,這個是request傳送後會產生一個timeout的delay,沒有respond。 跟我之前遇到的一般意思SQL注入不一樣,之前的是SQL語句拼接產生的注入,會通過注入點抓到資料庫。 這個相當於一種DDOS攻擊,向資料庫不停的

GLSurfaceView在recyclerview做itemview豎向滑動時出現遮蓋其他控制元件滑出螢幕的詭異異常解決方案

這幾天遇到了一個需求,recyclerview中的itemview都是圓角矩形的視訊itemview,然後歷盡千辛萬苦找到了實現視訊圓角的解決方案,但卻發現又進入了另一個坑,一個非常詭異的異常,如下圖

關於spring boot 前臺訪問後臺過程出現亂碼的解決方案

近日在開發spring boot 應用,發現將程式碼遷移到新的機器之後出現了在前臺進行業務的新增和編輯 輸入框輸入中文後,傳到後臺服務時全是亂碼(全是問號)經過一番排查之後得並不是因為資料庫編碼的問題,也不是tomcat encodeUrl 的編碼設定問題,而是因為機器環境本

64位win7使用vs2013為python3.4安裝pycrypto-2.6.1外掛報Unable to find vcvarsall.bat異常解決方案

問題描述: 64位win7中使用vs2013為python3.4.2安裝pycrypto-2.6.1外掛報Unable to find vcvarsall.bat。 問題分析: 1、原始碼分析,查詢python原始碼distribut模組中出現Unable to find

Android Studiojava.lang.AssertionError異常解決方案

新安裝的0.3.2就出現這個錯誤,然後以為更新到0.4.0會解決這個問題,結果還是悲劇的。。。 然後就跟著錯誤提示,找到了原因。 java.lang.AssertionError異常大致類似於下圖所示 第一步,右鍵module,選擇open module settings

struts2改spring boot過程一些問題及解決辦法記錄

1、引入依賴包的問題 一般情況下,常用的jar包在maven倉庫都可以找到,並能知道如何在pom.xml檔案中配置,但是有時候需要在一些專案中使用一些我們自己寫的程式碼生成的jar包,要引入maven中就需要做一些必要的處理。 我們專案中就有這樣的情況存在,

vim配色主題在tmux顯示異常解決方案(macOS+iterm2+zsh)

環境 分析 解決 環境 macOS + iterm2 + zsh + tmux vim的solarized和molokai主題在tmux中開啟時,顏色異常 分析 iterm2中

pythonimport libvirt異常解決辦法

來源自我的部落格 安裝多版本python後,會因為libvirt從yum安裝產生在其他版本python中import libvirt異常的問題 ImportError: /usr/lib

Spring-Service-事務執行緒異常執行事務回滾的方式

方式一: 使用Callable, 利用Callable的返回值判斷是否需要進行事務回滾 ExecutorService service = Executors.newCachedThreadP

3.3 Spring5原始碼---迴圈依賴過程spring讀取不完整bean的最終解決方案

根據之前解析的迴圈依賴的原始碼, 分析了一級快取,二級快取,三級快取的作用以及如何解決迴圈依賴的. 然而在多執行緒的情況下, Spring在建立bean的過程中, 可能會讀取到不完整的bean. 下面, 我們就來研究兩點: 1. 為什麼會讀取到不完整的bean. 2. 如何解決讀取到不完整bean的問題. &