gpt4 book ai didi

java - 在拦截器中获取 Controller 参数

转载 作者:行者123 更新时间:2023-12-05 07:40:14 25 4
gpt4 key购买 nike

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

目前我可以获得有关 Controller 参数的所有信息,但我找不到获取参数内实例的方法。这是我目前拥有的:

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;
}
}

示例 Controller 方法:

@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;
}

有没有一种从拦截器访问 Controller 参数的简单方法?

最佳答案

不确定您是否仍在寻找答案,但我认为您可以使用 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 对象。在请求选项中查看您想要获取的参数值。

关于java - 在拦截器中获取 Controller 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46352443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com