Я использую Запрос по примеру для реализации ряда сложных фильтров в моем приложении Spring Boot.
Я использую ExampleMatcher , чтобы определить, как Stringсвойства должны быть обработаны.Итак, у меня есть код, похожий на приведенный ниже, в нескольких разных контроллерах, которым требуется фильтр:
@GetMapping("/municipio/filter")
public @ResponseBody ResponseEntity<?> filtro(
Municipio municipio,
Pageable page,
PagedResourcesAssembler<Municipio> assembler
){
ExampleMatcher matcher = ExampleMatcher.matching()
.withIgnoreCase()
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING);
Example example = Example.of(municipio, matcher);
Page<Municipio> municipios = this.municipioRepository.findAll(example, page);
return ResponseEntity.ok(assembler.toResource(municipios));
}
Я хотел бы централизованно определить ExampleMatcher, чтобы избежать репликации этой конфигурации в каждом контроллере.Поэтому я попытался определить его как Bean
и внедрить его следующим образом:
@Configuration
public class AppConfig {
@Bean
public ExampleMatcher getExampleMatcher() {
return ExampleMatcher.matching()
.withIgnoreCase()
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING);
}
}
//Withing the controller class
@GetMapping("/municipio/filter")
public @ResponseBody ResponseEntity<?> filtro(
Municipio municipio,
Pageable page,
PagedResourcesAssembler<Municipio> assembler,
ExampleMatcher matcher //ExampleMatcher should be injected by Spring
){
Example example = Example.of(municipio, matcher);
Page<Municipio> municipios = this.municipioRepository.findAll(example, page);
return ResponseEntity.ok(assembler.toResource(municipios));
}
Но я получаю следующую ошибку:
[Не найден основной конструктор или конструктор по умолчанию дляinterface org.springframework.data.domain.ExampleMatcher]: java.lang.IllegalStateException: не найден основной или конструктор по умолчанию для интерфейса org.springframework.data.domain.ExampleMatcher
Может кто-нибудь указать, что ям здесь не хватает?