Ошибка при попытке ввести ExampleMatcher - PullRequest
0 голосов
/ 20 ноября 2018

Я использую Запрос по примеру для реализации ряда сложных фильтров в моем приложении 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

Может кто-нибудь указать, что ям здесь не хватает?

1 Ответ

0 голосов
/ 21 ноября 2018

ExampleMatcher matcher не будет введен как аргумент вашего метода контроллера, см. Ниже код того, как он должен быть определен:

@Controller// or @RestController
public class SomeController {
    @Autowired
    ExampleMatcher matcher;
    // rest of the code ...
}

и удалите его из списка аргументов

...