WebArgumentResolver 自定义参数解析案例

WebArgumentResolver 用于定义自定义的参数解析逻辑,用于将传入的 Web 请求参数或模型中的属性注入到控制器方法的参数中。

业务场景:

假设你正在开发一个 Web 应用程序,该程序需要处理一些复杂的数据结构,这些结构并不适合直接从标准的请求参数中获取,或者你需要从多个来源(如请求头、请求体、会话等)获取参数。

1. 创建自定义参数解析器:

java 复制代码
import org.springframework.web.method.support.WebArgumentResolver;
import org.springframework.web.bind.annotation.PathVariable;

public class CustomArgumentResolver implements WebArgumentResolver {

    @Override
    public Object resolveArgument(MethodParameter parameter, NativeWebRequest webRequest) throws Exception {
        if (parameter.hasParameterAnnotation(PathVariable.class)) {
            // 从 URL 路径变量中获取参数值
            String name = parameter.getParameterAnnotation(PathVariable.class).value();
            return webRequest.getAttribute(name, 0);
        }
        // 可以添加更多的参数解析逻辑
        return WebArgumentResolver.UNRESOLVED;
    }
}

2. 注册自定义参数解析器:

java 复制代码
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        argumentResolvers.add(new CustomArgumentResolver());
    }
}

3. 使用自定义参数解析器:

java 复制代码
@GetMapping("/users/{userId}/profile")
public String getUserProfile(@PathVariable("userId") Long userId, CustomType customType) {
    // 使用 userId 和 customType 中的数据
    return "userProfile";
}

在这个例子中,CustomArgumentResolver 会尝试解析带有 @PathVariable 注解的参数。如果参数是自定义类型 CustomType,它将从请求中获取所需的数据并注入到控制器方法中。

总结

  • WebArgumentResolver 允许开发者自定义参数的解析逻辑,提供更大的灵活性。
  • 它可以用于处理复杂的数据结构,或者从非标准来源获取参数。
  • 使用 WebArgumentResolver 可以提高应用程序的模块化和可维护性,尤其是当涉及到复杂的参数处理时。
相关推荐
专业程序开发源2 分钟前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
Wang's Blog3 分钟前
Java 项目实战: 外卖平台优化-前后端分离开发模式与工程拆分
java·开发语言
专业程序开发源16 分钟前
springboot社区养老系统44071-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·php·课程设计
小呆呆66623 分钟前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
IT大白鼠36 分钟前
图数据库系列 · 第 02 篇——架构拆解:原生图存储到因果集群
数据库·架构·nosql
周杰伦fans1 小时前
8GB显存下模型量化实战指南
人工智能·后端·c#
HEJOO91 小时前
指针的算术运算详解
java·数据结构·算法
sunshine22 girl1 小时前
Java学习六 Java常见API-2--String-3-字符串的截取替换和其他方法
java·开发语言·学习
EatFan1 小时前
从“框架混战“到“运行时收敛“:2026 年 AI Agent 开发框架的三条路线之争
java·数据库·人工智能·多智能体·ai agent·mcp·agent 框架
mftang1 小时前
CANopen协议:基于CAN的高层协议架构、通信模型与工业应用深度解析
架构·canopen·对象字典·canopen fd