2017-07-03 32 views
0

spring-boot-2-m2(thymeleaf 3)にアップグレードすると、JPA関係に対応するフィールドの変換エラーが失敗します。テンプレートの春のブート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">

同様の障害が発生した変換誤差をスロー。

もちろん、直接参照すると動作しますが、その場合はプロジェクト内の多くのテンプレートが壊れます。 nametype.idとして生成し、typeを生成しません。

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

質問 - なぜ彼らはAPIを変更しましたか?そして、すべてのテンプレートを再チェックせずに解決する方法はありますか?

+0

なぜ、「Thymeleafの変換に失敗しました」という例外はありますか? JPAが変換の問題に関係しているのは何なのでしょうか?別の場所では、問題はソフトウェアの3ビットのものです –

+0

私は非常に春の環境に新鮮です。 – 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に移行する人々のための可能な修正の1つです+ thymeleaf – Ranjeet

+0

ありがとう、答えを更新しました – BlackTea

関連する問題