Mam model:Wiosna danych URI zasobów REST klienta pracuje dla strun, ale nie za długo
public class MyModel {
@Id private Long id;
private Long externalId;
// Getters, setters
}
chciałbym używać externalId
jak mój identyfikator zasobu:
@Configuration
static class RepositoryEntityLookupConfig extends RepositoryRestConfigurerAdapter {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration configuration) {
configuration
.withEntityLookup()
.forRepository(MyRepository.class, MyModel::getExternalId, MyRepository::findByExternalId);
}
}
Jeśli externalId
jest String
, to działa dobrze. Ale ponieważ jest to numer (Long
)
public interface MyRepository extends JpaRepository<MyModel, Long> {
Optional<MyModel> findByExternalId(@Param("externalId") Long externalId);
}
podczas wywoływania: /myModels/1
uzyskać:
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]
...
oddzielnym zwyczaj EntityLookupSupport<MyModel>
prace klasy komponentów.
Czy brakuje mi czegoś, aby zadziałało dla Long
używając referencji metod w moim RepositoryRestConfigurerAdapter
?
Jaki jest typ bazowej kolumny bazy danych? Czy kolumna jest łańcuchem? – Ben
@Ben Typ kolumny bazy danych: int, Baza danych: MySQL. Jeśli typ był String, działa (nie jest potrzebny konwerter, pole modelu to String zamiast Long). Potrzebuję go do pracy z typem int (ograniczenia klucza obcego). – rizjoj
Co, jeśli wywołasz '/ myModels/1L' zamiast'/myModels/1'? Może to być problem z serializacją. –