После того, как я углубился в документацию springfox и отбросил некоторые идеи тупика, я придумал два решения, которые могут решить вашу проблему. Применяйте и смешивайте их в соответствии с вашими потребностями.
Подсказка # 1 - фильтр, используя RequestHandlerSelectors
Расскажите springfox какой оконечный метод вы хотели бы показать в развязности-интерфейсе. Поэтому вы можете настроить RequestHandlerSelector
для сканирования всего приложения, определенного пакета или классов и методов, которые вы аннотировали с помощью общей аннотации.
//Example for the method scan based on springfox's @ApiOperation annotation
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).paths(PathSelectors.any())
.build();
}
// Within your dao or repository class
public interface QueuedMessageDao extends CrudRepository<QueuedMessage, Integer> {
@ApiOperation(value = "This method finds all messages that are queued with the recipient's email address")
List<QueuedMessage> findByRecipientEmail(String email);
}
Это отрежет много запасных данных на основе весенних данных из вашей документации по чаргу. Но вы все же (удивительно) увидите нежелательные методы HTTP в вашем swagger-ui, например, GET
, HEAD
и OPTIONS
методы для вашего технического /<entity>/search
конечной точки. Я говорю технически, потому что эти конечные точки предназначены только для обнаружения других конечных точек, они не обслуживают вас данными из ваших объектов.
Подсказка # 2 - фильтр с помощью PathSelectors
В случае, если вы хотите избавиться от технических /<entity>/search
конечных точек в чванством, вы можете исключить их с помощью регулярных выражений, который отфильтровывает все поисковые конечные точки, но сохраняет конечные точки, которые имеют для вас значение. Чтобы все еще иметь конечную точку бизнеса для поиска внутри ваших объектов, вам просто нужно настроить неявную конечную точку GET.
//Example for the method scan based on springfox's @ApiOperation annotation
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).paths(PathSelectors.regex("^(?!(/.*(/search)$)).*$"))
.build();
}
// Within your dao or repository class
public interface QueuedMessageDao extends CrudRepository<QueuedMessage, Integer> {
@ApiOperation(value = "this generates a business search endpoint")
List<QueuedMessage> findById(int id);
@ApiOperation(value = "This method finds all messages that are queued with the recipient's email address")
List<QueuedMessage> findByRecipientEmail(String email);
}
Теперь вы избавились от конечной точки поиска, но по-прежнему имеете деловые поиски в документации по swagger. Надеюсь, это поможет!
Жесткий вопрос. Не могли бы вы дать мне подсказку, что такое ваш RestEntityController? – mika