我有一個端點:春數據JPA方法+ REST:枚舉到整數轉換
/api/offers/search/findByType?type=X
其中X
應該是一個Integer
值(我OfferType
實例的序數值),而春季認爲X
一String
,並將應用其StringToEnumConverterFactory
與StringToEnum
轉換器。
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
提供?此外,是否有任何方法可以在全球範圍內進行說明,而不僅僅是針對特定的枚舉?
編輯:我在我的classpath中找到了IntegerToEnumConverterFactory
,這是我所需要的。並且它是用DefaultConversionService
註冊的,這是用於轉換的默認服務。如何應用?
編輯2:這是一件小事,我想知道是否有一個屬性來打開枚舉轉換。
EDIT3:我試着寫一個Converter<String, OfferType>
我從TypeDescriptor.forObject(value)
了String
後,它並沒有幫助。
EDIT4:我的問題是,我已經把定製轉換器註冊到MVC配置(WebMvcConfigurerAdapter
與addFormatters
)而不是REST庫酮(RepositoryRestConfigurerAdapter
與configureConversionService
)。
這個問題與彈簧數據或JPA有什麼關係? –
因爲他使用Spring Data JPA? Andrew,您正在查詢的實體是否在相應的字段上有@Enumerated註釋? 因爲這裏所討論:http://stackoverflow.com/questions/17242408/spring-query-annotation-with-enum-parameter – PaulNUK
@PaulNUK,不,不 – Andrew