2017-07-03 68 views
0

在升級到彈簧引導2-m2(thymeleaf 3)後,對於與JPA關係對應的字段,我收到了失敗的轉換錯誤。Spring Boot 2.0.0M2 Thymeleaf 3無法轉換字段

Failed to convert from type [@javax.persistence.ManyToOne @javax.persistence.JoinColumn com.pps2....entities.FormType] to type [java.lang.String] for value '[email protected]'; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.util.Optional<?>] to type [java.lang.String]

JPA實體

@ManyToOne(fetch = FetchType.EAGER) 
@JoinColumn(name = "id_form_type") 
private FormType type; 

public FormType getType() { 
    return type; 
} 

的模板代碼爲:

<select th:field="*{type}" class="col-xs-12">

拋出類似失敗的轉換錯誤。

當然,當直接引用它的工作,但在這種情況下,它打破了項目中的很多模板。並生成name作爲type.id而不是type

工作實例 <select th:field="*{type.id}" class="col-xs-12">

問題 - 爲什麼他們改變了API?有沒有辦法解決它而不重新檢查所有模板(例如寫入轉換器?)?

+0

爲什麼在除了Spring之外說「Thymeleaf未能轉換」?如果是這樣的話,JPA是如何處理轉換問題的?又名調試,其中的問題是那些3位軟件 –

+0

謝謝我對Spring環境非常新鮮。 – BlackTea

回答

1

解決方案是編寫自己的Optional<T> to String轉換器。我不知道爲什麼有人從春季啓動排除2 M2

轉換代碼

import org.springframework.core.convert.converter.Converter; 
import org.springframework.stereotype.Component; 

import java.util.Objects; 
import java.util.Optional; 

@Component 
final class OptionalToString implements Converter<Optional<?>, String> { 

    public String convert(Optional<?> source) { 
     return Objects.toString(source.get(),""); 
    } 
} 

另一個選項

是直接指定的列(如id

工作示例<select th:field="*{type.id}" class="col-xs-12">

+0

我也必須在我的情況下也做同樣的事情。另外,我認爲如果你在答案中也包含了你的「工作示例」這個問題,那麼這將會對你有所幫助,因爲它也是人們遷移到春季的一個可能的解決方案5 + thymeleaf – Ranjeet

+0

謝謝,更新了答案 – BlackTea

相關問題