मैं एक मॉडल है:स्प्रिंग डाटा बाकी कस्टम संसाधन URI स्ट्रिंग लेकिन लंबे समय के लिए काम करता नहीं
@Configuration
static class RepositoryEntityLookupConfig extends RepositoryRestConfigurerAdapter {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration configuration) {
configuration
.withEntityLookup()
.forRepository(MyRepository.class, MyModel::getExternalId, MyRepository::findByExternalId);
}
}
तो externalId
एक है:
public class MyModel {
@Id private Long id;
private Long externalId;
// Getters, setters
}
मैं अपने संसाधन पहचानकर्ता के रूप में externalId
उपयोग करना चाहते हैं String
, यह ठीक काम करता है। लेकिन क्योंकि यह एक संख्या है (Long
)
public interface MyRepository extends JpaRepository<MyModel, Long> {
Optional<MyModel> findByExternalId(@Param("externalId") Long externalId);
}
जब लागू: /myModels/1
मैं:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
at org.springframework.data.rest.core.config.EntityLookupConfiguration$RepositoriesEntityLookup.lookupEntity(EntityLookupConfiguration.java:213) ~[spring-data-rest-core-2.6.4.RELEASE.jar:na]
at org.springframework.data.rest.core.support.UnwrappingRepositoryInvokerFactory$UnwrappingRepositoryInvoker.invokeFindOne(UnwrappingRepositoryInvokerFactory.java:130) ~[spring-data-rest-core-2.6.4.RELEASE.jar:na]
at org.springframework.data.rest.webmvc.RepositoryEntityController.getItemResource(RepositoryEntityController.java:524) ~[spring-data-rest-webmvc-2.6.4.RELEASE.jar:na]
at org.springframework.data.rest.webmvc.RepositoryEntityController.getItemResource(RepositoryEntityController.java:335) ~[spring-data-rest-webmvc-2.6.4.RELEASE.jar:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_111]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_111]
...
एक अलग कस्टम EntityLookupSupport<MyModel>
घटक वर्ग काम करता है।
क्या मुझे Long
के लिए RepositoryRestConfigurerAdapter
में विधि संदर्भों का उपयोग करने के लिए कुछ मिल रहा है?
अंतर्निहित डेटाबेस कॉलम का प्रकार क्या है? कॉलम एक स्ट्रिंग है? – Ben
@बेन डेटाबेस कॉलम प्रकार: int, डेटाबेस: MySQL। यदि प्रकार स्ट्रिंग थे, तो यह काम करता है (कोई कनवर्टर आवश्यक नहीं है, मॉडल फ़ील्ड लंबे समय के बजाय स्ट्रिंग होगा)। मुझे टाइप int (विदेशी कुंजी बाधाओं) के साथ काम करने की ज़रूरत है। – rizjoj
क्या होगा यदि आप '/ myModels/1' के बजाय'/myModels/1L' को कॉल करते हैं? यह एक क्रमबद्धता मुद्दा हो सकता है –