Я думаю, что лучший подход - привязать HandlerInterceptor к пути "/ api / vi / catalog".Вот пример: Interceptor возвращает ответ 404, если для параметра не задано значение product:
@Component
public class ProductInterceptorHandler implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (!request.getParameter("type").equalsIgnoreCase("product")){
response.setStatus(404);
// DO WHATEVER YOU WANT TO INFORM USER THAT IS INVALID
return false;
}
return true;
}
}
И вы должны привязать его к пути внутри вашего класса конфигурации (в моем случае SpringBootApplicationкоторый расширяет WebMvcConfigurerAdapter):
@SpringBootApplication
public class ASpringApplication extends WebMvcConfigurerAdapter implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(ASpringApplication.class, args);
}
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(new ProductInterceptorHandler()).addPathPatterns("/api/vi/catalog");
}
}
И, наконец, метод restcontroller:
@RequestMapping(value = "/api/vi/catalog", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> searchLocationIndexed(@RequestParam("type") String type ) throws Exception {
return ResponseEntity.ok("ok");
}