に私は、エンドポイントを持っていますString
であり、そのStringToEnumConverterFactory
をStringToEnum
コンバータに適用します。春データJPA方法+ REST:列挙型整数変換
public interface OfferRepository extends PagingAndSortingRepository<Offer, Long> {
List<Offer> findByType(@Param("type") OfferType type);
}
だから私は、単に与えられた序数でインスタンスを取得するカスタムConverter<Integer, OfferType>
を書いた:
public class IntegerToOfferTypeConverter implements Converter<Integer, OfferType> {
@Override
public OfferType convert(Integer source) {
return OfferType.class.getEnumConstants()[source];
}
}
は、それから私はConfiguration
で適切に登録:
@EnableWebMvc
@Configuration
@RequiredArgsConstructor
public class GlobalMVCConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new IntegerToOfferTypeConverter());
}
}
そして私はでしたfindByType?type=X
へのすべてのリクエストは私のコンバータを通過すると予想されますが、そうではありません。
要求パラメータとして定義されたすべての列挙型をInteger
として指定する必要はありますか?さらに、特定のenumだけでなく、それをグローバルに言う方法は何ですか?
EDIT:私が必要としているのはクラスパス内にIntegerToEnumConverterFactory
が見つかりました。そしてそれは変換のためのデフォルトサービスであるDefaultConversionService
で登録されています。それはどのように適用できますか?
EDIT2:これは簡単なことですが、enum変換を有効にするプロパティがあるかどうかは疑問でした。
EDIT3:私はTypeDescriptor.forObject(value)
からString
を持っていた後、私はConverter<String, OfferType>
を書くことを試みたが、それは助けにはなりませんでした。
EDIT4:私の問題は、私はMVCの設定(addFormatters
とWebMvcConfigurerAdapter
)の代わりに、RESTリポジトリ1(configureConversionService
とRepositoryRestConfigurerAdapter
)にカスタムコンバータ登録を置いていたことでした。
この質問はどのように春のデータまたはJPAに関連していますか? –
彼はSpring Data JPAを使用していますか? Andrew、あなたが照会しているエンティティは、適切なフィールドに@Enumeratedアノテーションを持っていますか? ここで説明したように:http://stackoverflow.com/questions/17242408/spring-query-annotation-with-enum-parameter – PaulNUK
@PaulNUK、いいえ、それは – Andrew