Получить параметры контроллера в перехватчике
Я создаю библиотеку проверки, и я хотел бы проверить запрос перед контроллером. Было бы очень хорошо, чтобы я мог получить параметр контроллера, который я хочу проверить в перехватчике.
В настоящий момент я могу получить всю информацию о параметрах контроллера, но не могу найти способ получить экземпляр, который находится внутри параметра. Вот что у меня на данный момент:
public class ValidationInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (handler instanceof HandlerMethod) {
HandlerMethod method = (HandlerMethod) handler;
for (MethodParameter param: method.getMethodParameters()) {
// Check if the parameter has the right annotations.
if (param.hasParameterAnnotation(RequestBody.class) && param.hasParameterAnnotation(Valid.class)) {
// Here I wan't to get the object that is in the parameter so I can validate it.
}
}
}
return true;
}
}
Пример метода контроллера:
@RequestMapping(value = "register", method = RequestMethod.POST)
public Response register(@Valid @RequestBody RegisterRequest request) {
// return response and stuff.
}
RegisterRequest:
public class RegisterRequest {
@JsonProperty("email")
public String email;
@JsonProperty("name")
public String name;
@JsonProperty("password")
public String password;
@JsonProperty("password_confirmation")
public String passwordConfirmation;
}
Есть ли простой способ получить доступ к параметрам контроллера с перехватчика?
1 ответ
Не уверен, что вы все еще ищете ответ, но я думаю, что вы можете сделать это, используя getPart()
или же getParts()
метод. Так что в приведенном выше случае вы можете сделать как
Collection<javax.servlet.http.Part> parts = request.getParts();
Iterator<javax.servlet.http.Part> it = parts.iterator();
while(it.hasNext()){
javax.servlet.http.Part p = it.next();
if(p.getSubmittedFileName() != null)
fileName = p.getSubmittedFileName();
}
Выше приведен только пример, где я попытался получить имя файла, который я загружаю как MultiPartFile
объект. Проверьте в параметрах запроса, какое значение параметра вы хотите получить.