我正在创建验证库,我想在控制器之前验证请求。能够获得我想在拦截器中验证的控制器参数真的很好。
目前我可以获得有关控制器参数的所有信息,但我找不到获取参数内部实例的方法。 这就是我现在所拥有的:
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;
}
是否有一种从拦截器访问控制器参数的简单方法?
答案 0 :(得分:0)
不确定yu是否还在寻找答案,但是我认为您可以使用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
对象上传的文件的名称。在请求选项中查看要获取的参数值。