Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取拦截器中的控制器参数_Java_Spring_Interceptor_Request Validation - Fatal编程技术网

Java 获取拦截器中的控制器参数

Java 获取拦截器中的控制器参数,java,spring,interceptor,request-validation,Java,Spring,Interceptor,Request Validation,我正在创建一个验证库,我想在控制器之前验证请求。如果我能得到我想在拦截器中验证的控制器参数,那就太好了 目前,我可以获得有关控制器参数的所有信息,但我找不到一种方法来获取参数中的实例。 这就是我目前的情况: public class ValidationInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, Htt

我正在创建一个验证库,我想在控制器之前验证请求。如果我能得到我想在拦截器中验证的控制器参数,那就太好了

目前,我可以获得有关控制器参数的所有信息,但我找不到一种方法来获取参数中的实例。 这就是我目前的情况:

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.
}
注册表请求:

public class RegisterRequest {
    @JsonProperty("email")
    public String email;

    @JsonProperty("name")
    public String name;

    @JsonProperty("password")
    public String password;

    @JsonProperty("password_confirmation")
    public String passwordConfirmation;
}

有没有一种简单的方法可以从拦截器访问控制器参数?

不确定您是否仍在寻找答案,但我认为您可以使用
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();
    }
Collection parts=request.getParts();
迭代器it=parts.Iterator();
while(it.hasNext()){
javax.servlet.http.Part p=it.next();
如果(p.getSubmittedFileName()!=null)
fileName=p.getSubmittedFileName();
}
上面只是一个示例,我试图获取作为
多部分文件
对象上载的文件名。在请求选项中签出要获取的参数值