С Spring WebFlux fn, RouterFunction
здесь, чтобы дать вам полный контроль над отображением запросов; точно так же контракт обработчика очень общий (принимает ServerRequest
, возвращает Mono<ServerResponse>
).
Все разработано, чтобы дать вам полный контроль; это связано с затратами, поскольку вещи должны быть немного более явными. В вашем случае согласование контента не выполняется для вас, и вам нужно выразить это в RequestPredicates
или управлять этим поведением на уровне обработчика.
В вашем случае я вижу несколько способов справиться с этим:
вы можете RequestPredicate.nest()
предикаты; например, вложите предикат глобального пути для конечных точек "/api/*"
и получите под этим предикат accept
, который проверяет правильный тип носителя (а затем вложите под него другие предикаты), и используйте специальный обработчик, который возвращает HTTP 415 для всех другие
вы можете сделать эту проверку непосредственно в обработчиках, проверив ServerRequest
и вернув оттуда HTTP 415
Нет строгого правила, и WebFlux функционал не предоставляет для этого реестр по уважительной причине: RouterFunction
- это просто функция, и рекомендуется избегать общего состояния и изменчивость.