在一個spring boot控制器類中暴露了兩個api。我有一個要求,只攔截一個api,不應該攔截其他api。誰能幫助我做到這一點呢?
下面是代碼
public class HeaderValidationInterceptor extends HandlerInterceptorAdapter{
private static final Logger logger = Logger. getLogger(HeaderValidationInterceptor.class)。
//在實際處理程式被執行之前。
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
validateHeaderParam(request)。
request.setAttribute("startTime", startTime)。
return true。
}
同時我有一個配置類來添加攔截器,如下所示
Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter{
HeaderValidationInterceptor headerValidationInterceptor。
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(headerValidationInterceptor)
}
}
控制器類
@RestController
public class MyController {
@Autowired
private ICityService cityService。
@GetMapping(value = "/cities"/span>)
public List<City> getCities() {
List<City> cities = cityService.findAll()。
return cities;
}
@GetMapping(value = "/cities/{cityId}"/span>)
public City getCityById( @PathVariable("cityId") String cityId) {
城市 city = cityService.findCityById(cityId)。
return cities;
}
uj5u.com熱心網友回復:
在你的攔截器中,你可以檢查你要攔截的端點的請求URI。
你可以使用一個正則運算式來匹配URI。下面是對/cities/{cityId}端點的說明。
if (request.getRequestURI(). matches("(/cities/[a-zA-Z0-9] /?) {
validateHeaderParam(request)。
request.setAttribute("startTime"/span>, startTime)。
}
我不確定你想在攔截器中做什么,但是對于你的例子,你也可以在控制器中做這個。像這樣,
@GetMapping(value = "/cities/{cityId}")
public City getCityById( @PathVariable("cityId") String cityId。HttpServletRequest請求) {
//這里你可以使用HttpServletRequest并做你的驗證。
// validateHeaderParam(request);
// request.setAttribute("startTime", startTime);
城市 city = cityService.findCityById(cityId)。
return cities;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/313466.html
標籤:
