- 自定义对象
- 解析 Hero 类型参数
- 注册解析器
- 参考资料
@Data
public class Hero{
private Long id;
private String name;
private int age;
private List poems;
public Hero(String name, int age) { this.name = name;this.age = age; }
}
解析 Hero 类型参数
继承 HandlerMethodArgumentResolver
@Component
public class HeroArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
// 返回 true 的则进入 resolveArgument 处理。
return Hero.class == parameter.getParameterType();
}
@Override
public Object resolveArgument(MethodParameter parameter, // 当前参数对象
ModelAndViewContainer mavContainer,
NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) {
// 根据需要可以拿 request, response 进行操作
HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
// 取参数
Integer age = Optional.ofNullable(request.getParameter("age")).map(Integer::parseInt).orElse(18);
String name = Optional.ofNullable(request.getParameter("name")).orElse("耀眼的笨笨");
// 按需求自定封装参数对象。
Hero hero =new Hero(name, age);
// Controller 中收到的参数就是这个返回值。
return hero;
}
}
注册解析器
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
HeroArgumentResolver heroArgumentResolver;
@Override
public void addArgumentResolvers(List argumentResolvers) {
argumentResolvers.add(heroArgumentResolver);
}
}
参考资料
Spring文档:Interface HandlerMethodArgumentResolver
腾讯云-开发者社区-YourBatman:HandlerMethodArgumentResolver(四):自定参数解析器处理特定应用场景,介绍PropertyNamingStrategy的使用【享学Spring MVC】
阿里云-开发者社区-李振良:SpringMVC源码总结(九)HandlerMethodArgumentResolver介绍



