錯誤提示:
Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.time.LocalDateTime]: No default constructor found; nested exception is java.lang.NoSuchMethodException: java.time.LocalDateTime.<init>()
DTO中包含LocalDateTime.如果有此類型的字段.基本就是400.轉化失敗.
因為他要求字符串的格式里面有T.就是2017-05-17T12:45:00 這種的.沒什么卵用.
於是上網百度.2種辦法.1.自定義參數解析器.終極大招.2.是注冊轉換服務.比較輕巧.就幾句代碼.也簡單.對常用的幾種格式進行了轉換.
org.springframework.format.support.FormattingConversionServiceFactoryBean
一開始沒什么問題.DTO種包含LocalDateTime.成功轉換.
但是今天直接用LocalDateTime做參數就報上面那個錯誤.錯誤原因很簡單.要new一個對象.但是LocalDateTime.不能new.上網也百度了好久.沒找到什么好辦法.關鍵是沒幾個遇到並且提問.....就差使用終極大招了.
最后想了想.他不是要new嘛.
@RequestParam(required = false)
把必須設成false.看行不行.結果瞎貓碰上死耗子.成了.它沒有去new對象去.於是就進行到了自定義轉換那一步.也就成了.
BeanUtils.instantiateClass()
吐槽一下這個方法.你說自定義的類不能new你報錯就算了.這種java自帶的也不特殊判斷一下.真是日了狗了.....我也沒找到什么重寫之類的方法.