by Anonymous » 25 Feb 2025, 10:40
Ich bin neu in der reaktiven Programmierung und bei Problemen. Ich habe ein sehr einfaches Szenario, < /p>
Eine Entität: < /p>
Code: Select all
class SimpleEntity{
@Id
int id;
String name;
}
< /code>
Ein zugehöriges Repository: < /p>
class SimpleEntityRepository extends JpaRepository{
Slice findByName(String name, Pageable pageable);
}
< /code>
Ein verwandter Dienst: < /p>
class SimpleEntityService{
@Autowired
SimpleEntityRepository repository;
public Mono findByName(String name, Pageable pageable){
//All business logic excluded
return Mono.just(
repository.findByName(name, pageable);
);
}
}
< /code>
Ein zugehöriger Controller: < /p>
class SimpleEntityController{
@Autowired
SimpleEntityService service;
@RequestMapping("/some-mapping")
public Mono findByName(@Requestparam String name, int pageNum){
return service.findByName(name, Pageable.of(pageNum, 100));
}
}
< /code>
In meinen Integrationstests versuche ich jetzt mit WebTestClient auf den Controller, aber ich kann nicht verstehen, wie ich die Antwort abrufen und deserialisieren kann: < /p>
@Test
public void someIntegrationTest(){
WebTestClient.ResponseSpec responseSpec = webTestClient.get()
.uri(URI)
.accept(MediaType.APPLICATION_JSON)
.exchange();
responseSpec.returnResult(SliceImpl.class).getResponseBody.blockFirst();
}
< /code>
Die letzte Zeile löst die folgende Ausnahme aus: < /p>
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of org.springframework.data.domain.Pageable (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: org.springframework.data.domain.SliceImpl["pageable"])
Was ich im Wesentlichen möchte, ist in der Lage, die Scheibe zu erhalten und in der Lage zu sein, Behauptungen darüber auszuführen.
Ich bin neu in der reaktiven Programmierung und bei Problemen. Ich habe ein sehr einfaches Szenario, < /p>
Eine Entität: < /p>
[code]class SimpleEntity{
@Id
int id;
String name;
}
< /code>
Ein zugehöriges Repository: < /p>
class SimpleEntityRepository extends JpaRepository{
Slice findByName(String name, Pageable pageable);
}
< /code>
Ein verwandter Dienst: < /p>
class SimpleEntityService{
@Autowired
SimpleEntityRepository repository;
public Mono findByName(String name, Pageable pageable){
//All business logic excluded
return Mono.just(
repository.findByName(name, pageable);
);
}
}
< /code>
Ein zugehöriger Controller: < /p>
class SimpleEntityController{
@Autowired
SimpleEntityService service;
@RequestMapping("/some-mapping")
public Mono findByName(@Requestparam String name, int pageNum){
return service.findByName(name, Pageable.of(pageNum, 100));
}
}
< /code>
In meinen Integrationstests versuche ich jetzt mit WebTestClient auf den Controller, aber ich kann nicht verstehen, wie ich die Antwort abrufen und deserialisieren kann: < /p>
@Test
public void someIntegrationTest(){
WebTestClient.ResponseSpec responseSpec = webTestClient.get()
.uri(URI)
.accept(MediaType.APPLICATION_JSON)
.exchange();
responseSpec.returnResult(SliceImpl.class).getResponseBody.blockFirst();
}
< /code>
Die letzte Zeile löst die folgende Ausnahme aus: < /p>
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of org.springframework.data.domain.Pageable (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: org.springframework.data.domain.SliceImpl["pageable"])[/code]
Was ich im Wesentlichen möchte, ist in der Lage, die Scheibe zu erhalten und in der Lage zu sein, Behauptungen darüber auszuführen.