Можно попробовать использовать Перехватчик Spring Handler , извлекая параметр в виде строки из самого запроса, и проверить, является ли он числовым.Вы можете либо иметь по одному перехватчику для каждого случая и наблюдать только на этих конечных точках (более простых, но более классных) или обобщить его для проверки всех параметров конечной точки по запросу.
Один пример для каждого случая:
public class IntTypeCheckInterceptor extends HandlerInterceptorAdapter {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
String myIntString = request.getParameter("myInt");
Pattern intPattern = Pattern.compile("[0-9]+");
Matcher intMatcher = intPattern.matcher(myIntString);
//I *think* this does the whole input
if(!intMatcher.matches()) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return false; //false tells spring to stop processing and returns to the client
}
return true; //true tells spring to continue as normal
}
}
Config:
@Override
public void addInterceptors(InterceptorRegistry registry) {
//with this only do where the request parameter is the same name and expected to be an int
registry.addInterceptor(new IntTypeCheckInterceptor()).paths("/your-intpath", "your-intpath2");
}
Другой подход заключается в проверке метода-обработчика HandlerMethod, извлечении имен и типов параметров и проверке каждого из них.
Фильтр также должен работать,Я просто более знаком с перехватчиками, и это внутри Spring, так что у вас есть все те же функции, доступные в контексте приложения.