Получить параметры контроллера в перехватчике

Я создаю библиотеку проверки, и я хотел бы проверить запрос перед контроллером. Было бы очень хорошо, чтобы я мог получить параметр контроллера, который я хочу проверить в перехватчике.

В настоящий момент я могу получить всю информацию о параметрах контроллера, но не могу найти способ получить экземпляр, который находится внутри параметра. Вот что у меня на данный момент:

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 объект. Проверьте в параметрах запроса, какое значение параметра вы хотите получить.

Другие вопросы по тегам